接口回调演示代码-我自己的理解,可能不准确,准确的含义我也不清楚
下面是接口:
package com.cs.callback;
public interface IBankTransport {
public double getTransportRate();//获取转账费率的值,由实现类自己去实现。
}
下面是调用者:
package com.cs.callback;
/**
* 接口回调的演示代码,
* @author Administrator
*
*/
public class BankTransport {
/**
* 这个方法的参数是个接口,方法的实现里面调用了接口的getTransportRate(),
* 这个接口的方法里面执行了什么,现在还不知道,只有在调用transportMoney()方法的时候,
* 要传递参数给它的时候,调用者要去实现接口的getTransportRate()方法,然后到运行时候才知道确切做了什么
* @param ibt
*/
public void transportMoney(IBankTransport ibt){
System.out.println("银行转账");
double rate = ibt.getTransportRate();
System.out.println("转账费率是:"+rate);
}
public static void main(String[] args) {
BankTransport b = new BankTransport();
//这里直接创建了接口的一个匿名类,也可以另外创建一个类来实现这个接口然后再创建类的实例
IBankTransport ib = new IBankTransport(){
//费率的值由调用的时候决定,它是多少完全由调用者决定,这个形式就是接口回调
public double getTransportRate() {
return 1.25d;
}
};
//调用这方法时,即要去取出费率的值时,就要往前面刚刚定义的取费率的方法,在形式上就像是代码往回执行了,回过头来调用方法了,所以叫回调
b.transportMoney(ib);
}
}
接口回调在形式上,就是定义一个方法(叫它做A方法),该A方法需要的参数是个接口,A方法的代码里面就是调用接口的某个方法即可,其他代码行自己写,
参数一定要是个接口,A方法必须要调用到接口的一个或多个方法,如果完全不使用到接口里的任何方法,就没有接口回调的说法了,直接给个null就可以了,
反正又不被使用的。
剩下的就是调用者需要使用刚刚定义的这个A方法时,它要为A方法提供一个接口的实现类过来,实现类可以事先定义好,也可以在调用者调用前创建个匿名的内部类,
然后实现接口的所有方法。在执行A方法时,A方法里调用了接口的某方法,也就是执行实现类的同名方法,此时就好像代码往回走了,回过头来调用实现类所定义的方法,
执行完毕A方法后,就继续执行A方法下面的其他代码行。
接口回调大概就是这样一个过程,用在什么地方,暂时还没有想到,因为我很少用到。现在的这个例子只是学习的时候,为了学习回调函数而去做的,没有什么实际例子。
我觉得可能是在某些方法需要在调用时才去确定执行的内容,或者执行的内容完全由调用者来决定的时候会使用到接口回调。