转载自CNDS的cgwang_1580 https://blog.csdn.net/cgwang_1580/article/details/79592244
在java中,回调用的十分频繁;Android开发中,回调往往出现在相机的预览、采图中,这里我们来简单地说明一下回调的实现原理;
回调,顾名思义就是在调用之后返回调用。java回调方法简单的说就是:假设有两个类class A和class B,在B中调用A类的一个方法a1,而a1在执行时又调用了B类中的方法b1,则b1就称为回调函数。
java中,回调的实现一般与接口联系在一起一般有如下套路:
首先,定义一个接口”interface in”,其中有方法inFun;
然后,定义类”class B implements in”,并实现接口in中的方法inFun,且有方法funB;
接着,定义类”class A”,其中有方法funA,且funA的形参中有一个为接口in类型,该方法被B的方法funB调用,并在该方法中调用方法inFun,由于方法inFun在类B中实现,所以inFun即可以称为类B的回调函数;
最后,由主函数来调用类B中的方法funB,即可以实现回调。
以下为一个实例,新建一个Java项目:
1、定义接口:
public interface DoJob {
void fillBlank(int a, int b, int result);
}
其中,接口中有方法fillBlank,对应上述中的inFun;
2、定义类B
public class Student implements DoJob{
private String name = null;
public void setName(String theName) {
name = theName;
}
public void callHelp(int a, int b, Student stu) {
new Calculator().add(a, b, stu);
}
public void fillBlank(int a, int b, int result) {
System.out.println(name + " please for help, " + "the result is " + a + "+" + b + "=" + result);
}
}
其中,方法callHelp对应上述讲解中的funB,fillBlank为实现接口中的方法;
3、定义类A
public class Calculator {
private String name = null;
public void setName(String theName){
name = theName;
}
public void add(int a, int b, DoJob job ){
int result = a + b;
job.fillBlank(a, b, result);
}
}
其中,方法add即对应上述中的funA,在该方法中调用接口方法inFun,即fillBlank;
4、在主方法中实现回调
public class CallbackTest {
public static void main(String[] args){
Student xiaoMing = new Student();
xiaoMing.setName("Xiao Ming");
Calculator xiaoHong = new Calculator();
xiaoHong.setName("Xiao Hong");
int cal1 = 123;
int cal2 = 1123;
xiaoMing.callHelp(cal1, cal2, xiaoMing);
}
}
其中,方法的调用顺序为:callHelp → add → fillBlank(回调函数),从而实现java回调
---------------------
作者:cgwang_1580
来源:CSDN
原文:https://blog.csdn.net/cgwang_1580/article/details/79592244?utm_source=copy
网友评论