java有没有回调函数_Java中的回调函数 - wangjianme的个人空间 - OSCHINA - 中文开源技术交流社区...
Java代碼的回調函數經常由框架或是系統定義,由程序開發人員填充。
它的最主要特點是即定義了調用的規范同時又非常的靈活。
回調函數有些類似于觀察者模式,它們的區別在于:觀察者模式返回的參數為Event對象,而回調函數則一般直接返回數據本身。
回調函數包含:調用者:如dbutils中的QueryRunner。
回調規范,即一個接口,如dbutils中的ResultSetHandler。其中可以定義N多個它的子類。
返回的數據:由用戶自己定義,或是系統已經定義。
1、簡單回調函數
package cn.itcast.test;
/**
* 回調函數的簡單寫法
*
*/
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;
/**
* 返回指定的泛型的回調函數
*
*/
public class CallBack {
public static void main(String[] args) {
B b = new B();
String str = b.getO(new IB(){
public String getObject(){
return "ddd";
}
});
System.err.println(str);
}
}
class B{??????????????????? //聲明一個類,此方法返回一個普通的值
public T getO(IB b){//聲明方法同時接收一個回調函數,注意泛型的使用
return b.getObject();
}
}
interface IB{? ????????? ??//將泛型定義到類上,直接在類上聲明泛型,這樣在聲明時就可以設置泛型了
public T getObject();
}
2、以下是返回List類型的回調函數:
package cn.itcast.test;
import java.util.ArrayList;
import java.util.List;
/**
* 返回list類型的回調函數
*
*/
public class CallBack2 {
public static void main(String[] args) {
C c = new C();?????? ?????????? //以下是測試代碼
List list =? c.getObjs(new IC(){
public String getObject(int row) {
return "Hello"+row;
}
});
System.err.println(">:"+list);
}
}
class C{?????????????????????????????? //定義被調用的類
public List getObjs(IC ic){? //在類上定義泛型多處使用
List list = new ArrayList(); //里面聲明一個List并多次調用回調函數的方法
for(int i=0;i<10;i++){
T t = ic.getObject(i);????????? //多次調用回調函數的方法
list.add(t);??????????????? //將從回調函數中返回對象放到List中
}
return list;
}
}
interface IC{??????????? //定義回調規范
public T getObject(int row);
}
總結
以上是生活随笔為你收集整理的java有没有回调函数_Java中的回调函数 - wangjianme的个人空间 - OSCHINA - 中文开源技术交流社区...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java data是什么文件_如何用ja
- 下一篇: java中数据结构的应用_Java集合入