Java中如何实现接口回调_利用java的接口实现回调

onclick,onfocus,onload,oncreate......

我们在java GUI 编程、js事件、android组建中常常见到这些单词,这些函数就是回调函数。C语言利用指针实现回调,与面向对象的语言不同。我们这里介绍利用java的接口实现回调的方法。

回调是一种双向的调用模式,例如我们要调用B的一个特定的方法,B在执行完又要调用A的一个方法,而这个A(或者说A的这个方法)是由我们自己实现的。所以可以这样理解:“回调函数也是一个函数或过程,不过它是一个由调用方自己实现,供被调用方使用的特殊函数。”

不过,有了面向对象的机制后,我们就可以轻松地使用这套机制来实现回调了,让回调变得简单。

例子:

package com.yawn.callback;

/**

* 回调要达到的效果就是在执行完b的go方法之后,再自动调用我们自己实现的onFinish方法

* A可以是任何一个实现了Finish接口的类,用于存放我们实现的onFinish方法

*

* @author yawn

*

*/

public class CallBack {

public static void main(String[] args) {

B b = new B(new A()); // 初始化B并指定B所要回调的对象(方法)

b.go();

}

}

class A implements Finish{

@Override

public void onFinish() {

System.out.println("finish");

}

}

package com.yawn.callback;

/**

* B的内部实现也很简单,只需要一个接口类型的成员变量(这个成员变量的具体实现由我们初始化B时指定),

* 在执行方法完成时调用这个成员变量(接口对象)的onFinish方法即可

*

* @author yawn

*

*/

public class B {

Finish f ;

public B(Finish f){

this.f = f;

}

void go(){

System.out.println("Go go go!");

if (f != null){

f.onFinish();

}

}

}

package com.yawn.callback;

public interface Finish {

void onFinish();

}

这样就可以在调用B的go方法之后又调用我们实现的onFinish方法了。

运行结果

Go go go!

finish

其实在初始化B时不一定要实现一个类A,也可以直接实现接口中的方法:

package com.yawn.callback;

/**

* 回调要达到的效果就是在执行完b的go方法之后,再自动调用我们自己实现的onClick方法

* A可以是任何一个实现了Finish接口的类,用于存放我们实现的onFinish方法

*

* @author yawn

*

*/

public class CallBack {

public static void main(String[] args) {

B b = new B(new Finish() {

@Override

public void onFinish() {

System.out.println("finish");

}

});

b.go();

}

}

你可能感兴趣的:(Java中如何实现接口回调)