博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中的回调函数
阅读量:5930 次
发布时间:2019-06-19

本文共 1811 字,大约阅读时间需要 6 分钟。

  hot3.png

Java代码的回调函数经常由框架或是系统定义,由程序开发人员填充。

它的最主要特点是即定义了调用的规范同时又非常的灵活。

回调函数有些类似于观察者模式,它们的区别在于:观察者模式返回的参数为Event对象,而回调函数则一般直接返回数据本身。

回调函数包含:调用者:如dbutils中的QueryRunner。

                      回调规范,即一个接口,如dbutils中的ResultSetHandler<T>。其中可以定义N多个它的子类。

       返回的数据:由用户自己定义,或是系统已经定义。

 

1、简单回调函数

package cn.itcast.test;

/**

 * 回调函数的简单写法

 * 王健

 * 2012-1-11

 */

public class TT {

    public static void main(String[] args) {

       One a = new One();

       a.abc("Hello",new A(){   //这是没有返回值的回调函数

           public void abc(String ss) {

              System.err.println("SSS:"+ss);

           }

       });

    }

}

class One{           //定义一个调用类

    public void abc(String sql,A a){

       a.abc(sql);

    }

}

interface A{         //定义规范

    public void abc(String ss);

}

2、拥有任意返回值的回调函数

1、以下是返回一个值的回调函数:

package cn.itcast.test;

/**

 * 返回指定的泛型的回调函数

 * 王健

 * 2012-1-11

 */

public class CallBack {

    public static void main(String[] args) {

       B b = new B();

       String str = b.getO(new IB<String>(){

           public String getObject(){

              return "ddd";

           }

       });

       System.err.println(str);

    }

}

class B{                    //声明一个类,此方法返回一个普通的值

    public <T> T getO(IB<T> b){//声明方法同时接收一个回调函数,注意泛型的使用

       return b.getObject();

    }

}

interface IB<T>{              //将泛型定义到类上,直接在类上声明泛型,这样在声明时就可以设置泛型了

    public T getObject();

}

 

2、以下是返回List<T>类型的回调函数:

package cn.itcast.test;

import java.util.ArrayList;

import java.util.List;

/**

 * 返回list<T>类型的回调函数

 * 王健

 * 2012-1-11

 */

public class CallBack2 {

    public static void main(String[] args) {

       C c = new C();                  //以下是测试代码

       List<String> list =  c.getObjs(new IC<String>(){

           public String getObject(int row) {

              return "Hello"+row;

           }

       });

       System.err.println(">:"+list);

    }

}

class C{                               //定义被调用的类

    public <T> List<T> getObjs(IC<T> ic){  //在类上定义泛型多处使用

       List<T> list = new ArrayList<T>(); //里面声明一个List并多次调用回调函数的方法

       for(int i=0;i<10;i++){

           T t = ic.getObject(i);          //多次调用回调函数的方法

           list.add(t);                //将从回调函数中返回对象放到List中

       }

       return list;

    }

}

interface IC<T>{            //定义回调规范

    public T getObject(int row);      

}

转载于:https://my.oschina.net/wjme/blog/101870

你可能感兴趣的文章
我在农业2.0的互联网创业思考 (1)
查看>>
如何在Linux中查看所有正在运行的进程
查看>>
Docker: 限制容器可用的内存
查看>>
Git 的4个阶段的撤销更改
查看>>
Downloading jQuery 3.2.1
查看>>
selenium+python自动化87-Chrome浏览器静默模式启动(headless)
查看>>
在IIS7、IIS7.5中应用程序池最优配置方案
查看>>
mybatis 整合spring之mapperLocations配置的问题
查看>>
Python time 的应用
查看>>
hadoop21---使用代理修改List,代理流程
查看>>
mysql for update语句
查看>>
历史时间轴
查看>>
android自定义View绘制天气温度曲线
查看>>
legend---七、jquery如何选中select的selected的选择上的自定义属性
查看>>
『Python』setup.py简介
查看>>
iOS端架构、基本组成与使用说明
查看>>
HTTrack--web site copier offline browser
查看>>
use java style regular expression in groovy fetch and extractor info ,fucking urgly
查看>>
shuffle算法的一种简易实现
查看>>
Android 3.2 联机测试adb驱动如何安装和配置?
查看>>