今天搞清楚了java的回调机制以及android中的回调方法的具体含义,只是感慨自己还是太小白了,加油!
首先引用维基百科上的定义: 在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。
定义:java中的回调是通过一个接口实现的
直接上示例:程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。其中a程序中的call()方法就是回调方法。
caller类也就是A程序员写的a程序
public class caller {
MyCallInterface callInterface = null;
public void setCallFunu(MyCallInterface callInterface){
this.callInterface = callInterface;
}
public void call(){
callInterface.printName();
}
}
接口的定义
public interface MyCallInterface {
public void printName();
}
其中接口中定义的方法printName()就是我们在b程序中想要实现的方法也是android中的自己写的onclick方法(此处以android中的onClickListener方法为例子,后面会详细提到)。
然后是B程序员写的b程序
public class Client implements MyCallInterface{
public void printName(){
System.out.println("回调成功");
}
}
测试类Test
public class Test {
public static void main(String args[]){
caller caller = new caller();
caller.setCallFunu(new Client());
caller.call();
}
}
结果:
回调成功
分析与总结
因为java中没有函数参数的概念,所以可以通过接口来实现回调。
记住一句话:B程序员通过接口使用a程序调用自己b程序中的方法,叫做回调。
————————————————————————————————————以下是Android中的分析
onClickListener方法为例子
Button.setOnClickListener(new OnClickListener(){
public void OnClick(){
System.out.println("我写的点击效果");
}
});
Button继承自View类就是A程序员写的a程序类,setOnClickListener方法就是a程序中的 setCallFunu()方法,就是设置通过某个接口。后面的匿名内部类OnClickListener就是client类了,只不过换了个形式。
阅读了源码之后发现确实是这样的!
最后说一下android回调的作用:android开发者也就是程序员A定义好了这些接口和方法,使用者我们也就是程序员B自己实现了自己的OnClick方法,我们想调用自己的方法就要通过这样的回调机制实现。
学到了!