Java中的回调函数

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

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

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

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

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

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

 

1、简单回调函数

package cn.itcast.test;

/**

 * 回调函数的简单写法

 * @author 王健

 * @version 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;

/**

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

 * @author 王健

 * @version 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>类型的回调函数

 * @author 王健

 * @version 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);      

}

你可能感兴趣的:(java,DbUtils,回调函数,QueryRunner)