接口回调机制理解

来源:互联网 发布:js object 键 值 编辑:程序博客网 时间:2024/06/06 13:23

定义

Java允许调用接口的方法,但前提是编译时接口的对象必须是一个具体的类,并且实现了接口。当我们调用接口时,接口的具体子类的具体方法会被调用,这就是回调。

public interface Interface {

void printClassName();

}

public class A implements Interface {

B b = new B();b.setListener(this);@Overridepublic void printClassName() {    System.out.println("This is class A!请告诉我时间");}

}

public class B {

Interface mInterface;public void setListener(Interface interface){    this.mInterface = interface;}// B 在setListener里面接受到Interface后的某个时刻,执行showPrintpublic void showPrint(){    if(mInterface != null){        mInterface.printClassName();    }}

}


接口回调应用场景:

A:A
B:中间人B
C:C
A new 一个中间人B,并告诉B:如果C想吃饭了就立刻告诉A;
B再注册到C中,时刻监听C。此时C持有B,并可以操作A的方法;
当C觉得饿,想吃饭了,B就告诉A:C想吃饭了;
A根据B的回报,点了外卖。


A:Activity
B:OnClickListener
C:Button

C 中预留有B的专属位置,但为null,即mOnClickListener=null;

public OnClickListener mOnClickListener

在A中new 一个对象B,并嘱咐B一旦C有点击事件,就告诉A;

把B注册到C中,实现对C的监听,此时C中B的专属位置不为null;

Button.setOnClickListener(B)mOnClickListener=B

C中有点击触发,调用onClick(),也就是接口B中的onClick方法;

mOnClickListener.onClick(this)

B将监听情况告诉个A,A给出相应的动作、行为

    OnClickListener() {         @Override         public void onClick(View v) {          //A听到后,发生的动作行为         }    }

让编译器知道,调用接口方法的时候,
去回调我们设置的OnClickListener子类的对应方法,即A中接口的实现类,
new View.OnClickListener() {
@Override
public void onClick(View v) {
// doSth 在这里
}
}

reference : http://www.cnblogs.com/Fndroid/p/5308713.html

如理解有偏差,欢迎指正!