Java接口回调

Android中的回调,遵循的基本思想是Java中的回调函数。
回调函数就是一个通过函数指针调用的函数。如果你的函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的时间或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
Java中没有指针的概念,通过接口和内部类的方式实现回调的功能。

举个栗子,有以下几个文件:

文件Interface.java,接口定义类:

1
2
3
public interface Interface {
public void iPrintf();
}

文件App.java,接口的实现类1:

1
2
3
4
5
public class App implements Interface {
public void iPrintf() {
System.out.println("impl: printf");
}
}

文件App2.java,接口的实现类2:

1
2
3
4
5
public class App2 implements Interface {
public void iPrintf() {
System.out.println("impl: printf 2");
}
}

文件Sys.java,调用回调函数的类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Sys {
//定义回调接口的成员变量
private Interface mInterface;

//设置回调接口对象成员变量
public void setCallback(Interface mInterface) {
this.mInterface = mInterface;
}

//调用回调接口对象中的方法
public void doCallback() {
mInterface.iPrintf();
}
}

文件Test.java,测试类:

1
2
3
4
5
6
7
8
9
10
11
public class Test {
public static void main(String args[]) {
Sys mSys = new Sys();
App mApp = new App();
App2 mApp2 = new App2();
mSys.setCallback(mApp); //通过形参传递接口的实现类的对象的引用
mSys.doCallback();
mSys.setCallback(mApp2); //通过形参传递接口的实现类的对象的引用
mSys.doCallback();
}
}

参考

  1. Android接口回调,最简单的理解方式
  2. Android 回调方法的实现