Java学习之回调机制
目录
前言
在进行java学习时,听到很多大牛说,java有很多机制,例如:反射机制、回调机制等等。
先开始,也是晕的没边。后来,查找很多资料后,了解了一些,在这里记录一下,java的回调机制吧。
一、回调机制简介
简而言之,就是,A类调用B类的E方法,然后,因为B类的E方法会调用A类的D方法。所以,称A类的D方法为回调发方法。
而在实现时,一般要满足如下几个条件:
首先会存在三个Object:A 类、B类、接口C。
- A类实现了接口C中的方法D。
- A类有了B类的引用。
- B类中存在一个输入参数的数据类类型为接口C的方法E。
- 且,在B类中对E方法的定义中会存在对接口C的方法D的调用。
- 因为,A类中存在B类的引用。所以, A类的对象 可以调用 B类方法E ,并且传入的参数为A.this。
- 又因为,D是A实现了的接口C的方法。
- 所以,整个过程就出现了,A调用了B的E方法,而B的E方法又回调了A的D方法。
二、举例说明
举个栗子说就是:
上级A 这里有一堆需要处理的数据和处理数据时遵循的规则,而手下有B。
B在处理这些数据时,需要遵循处理这些数据的规则,所以,
会看这些数据的处理规则手册,而这些处理规则手册是由上级A依据一套相当完善的规则
制度编写的。B处理完数据后,A会让B将结果提交。
如果这个例子与上文中对回调机制的实例描述对比的话,那么:有如下对应关系:
名称 | 对应关系 |
---|---|
被回调类: | 上级A————————————————————————————类A |
被调用类: | B——————————————————————————————类B |
被调用方法: | B将结果提交—————————————————————————-类B的E方法 |
被实现的回调接口: | A制定数据处理规则时所依赖的那一套相当完整的规则制度。——————接口C |
被回调的方法: | 按照A制定的数据处理规则进行数据的处理。————————————类A实现的接口C的方法D |
回调过程: 首先,A让B处理数据,就调用了B的出来数据方法,然后,在B进行数据处理时,因为要依照A制定的规范进行处理,所以就在B使用处理舒服方法时,调用了A的规范数据方法。
三、使用具体代码进行实现说明:
说了那么多理论的,下面来点实际代码,刺激一下诸位的‘味蕾’。
- 首先是定义一个Interface: C
public interface C{
public String formData(String data);
}
- 定义被回调者:A
public class A implements C{
private B b = null;
private String data = "Lots Of Data";
public A(B b){
this.b = b;
}
@Override
public String formData(String data){
//System.out.println("hello:"+data);
return "hello:"+data;
}
public void setData(String data){
this.data = data;
}
public String getData(){
return this.data;
}
public void setB(B b){
this.b = b;
}
public B getB(){
return this.b;
}
}
- 定义被调用者:B
public class B{
public String BtoformData(C c){
String data = c.formData(((A)c).getData());
return data;
}
}
程序测试
public class Test{ public static void main(String[] args){ A a = new A(new B()); String formedData = a.getG().BtoformData(a.this); } }
运行 Test之后,会打印
hello:Lots Of Data
,则表示正确。
四、总结
在使用回调机制时,用一句话总结就是,
一个实现了某个接口的类在调用另一个以该类为参的方法时,被调用了实现了的接口方法。而这个方法被成为毁掉方法。
这只是我对回调机制的理解,如果有说的不对的地方,欢迎大家指出讨论。
同时欢迎大家转载,转载时请注明出处谢谢!
snowlive
http://blog.csdn.net/snowlive