回调函数顾名思义,就是你调用我的方法的时候我也在调你的方法,它一般满足以下几个条件:
①有一个CallBack接口,里面有被回调的方法
package spdb.demo.callBack;
/**
* @Title: CallBack.java
* @Package spdb.demo.callBack
* @Description: 这是一个回调接口
* @author John Hawkings
* @date 2017年6月12日
* @version V0.0
*/
public interface CallBack {
public void solve(String result);
}
②一个类A实现这个接口并调用B类的方法,这其中A类中得用B类的引用,可以在构造时赋值
package spdb.demo.callBack;
public class A implements CallBack {
public B b;
public A(B b){
this.b = b;
}
public void testA(final String str){
new Thread(new Runnable() {
@Override
public void run() {
//注 : A.this用到的是多态
b.testB(A.this, str);
}
}).start();;
}
@Override
public void solve(String result) {
System.out.println("这是A类的回调函数,传过来的参数是:"+result);
}
}
③B类中得有一个参数为callback的方法(CallBack callBack)
package spdb.demo.callBack;
public class B {
public void testB(CallBack callBack,String str){
System.out.println("这里是B类被调用了,传过来的参数是:"+str);
callBack.solve("这里是B类呼叫A......");
}
}
④A类对象调用B类的方法
public void testA(final String str){
new Thread(new Runnable() {
@Override
public void run() {
b.testB(A.this, str);
}
}).start();;
}
⑤B类可以在方法被调用后调用A 类中的回调方法
callBack.solve("这里是B类呼叫A......");
运行方法结果如下:
package spdb.demo.callBack;
public class Test {
public static void main(String[] args) {
B b = new B();
A a = new A(b);
a.testA("这里是A呼叫B。。。。。。");
}
}
欢迎交流!