java回调是一个非常灵活的机制,使用的场景一般是封装一个模块的时候,需要在特定的地方调用某些方法,这些方法里面有什么内容是根据实际使用的情况而定的话,这个时候就需要在该模块里面定义一个接口,然后交给实际使用这个模块的使用者类来实现接口的方法,相对来说非常灵活。
很多人在实现回调的时候经常被接口的调用者和接口的实现者搞混淆了
接口的调用者是指实际应用中调用接口里面函数的类,可以说这个类就是本例中的功能模块简称A
接口的实现者是指根据实际情况实现接口,补充接口函数具体操作的类,简称B
很重要的是,从接口的使用层面来看,接口的调用者是A,实现者是B
从整体功能调用层面来看,功能的调用者是B,实现者是A。之前
下面来说一下如何实现java回调吧
沿用上面的说法
在A里面
第一步:声明一个接口
第二步:声明一个接口调用对象
第三步:写一个设置传入接口对象的函数
第四步:根据功能的需要在A里面调用接口里面的方法
在B里面
第一步:实现该接口,可以通过implements方式,也可以自己new一个
第二步:实现接口调用方法
看看demo
package com.callbackdDemo;
/**
* 接口的调用者
* 功能的实现者
* @author cgx
*
*/
public class A {
private AListener mListener;
public interface AListener{
//接口的方法,需要在实现接口的类里面完成具体的操作,也就是所谓的回调方法
public void callback();
}
public void setListener(AListener listener){
mListener=listener;
}
public void mothed(){
System.out.println("功能模块类A的功能被调用啦!!");
mListener.callback();
}
}
package com.callbackdDemo;
import com.callbackdDemo.A.AListener;
/**
* 接口的实现者
* 功能的调用者
* @author cgx
*
*/
public class B {
public static void main(String[] args) {
A a=new A();
a.setListener(new AListener() {
@Override
public void callback() {
// TODO Auto-generated method stub
System.out.println("功能的调用者B里面实现的回调函数被调用啦!!");
}
});
//功能模块调用方法
a.mothed();
}
}
执行结果
功能模块类A的功能被调用啦!!
功能的调用者B里面实现的回调函数被调用啦!!