也许大家在使用JavaScript的时候对回调方法非常熟悉,这种回调的方式使得JS可以非常灵活的处理事件响应和其它的一些有趣的问题!可能你也常常会有这样的疑问,JAVA中能不能使用回调方法呢?
答案是肯定的,也是否定的!由于JAVA不像C一样有显式的指针引用,这就注定了JAVA不能使用一般的回调方法!但是,JAVA提供的强大的接口机制却给我们开发者提供了灵活的处理,可以说,回调在接口面前显得如此的简单!
下面给大家一个小小的例子:
1、首先,我们要创建一个接口,这个接口中定义了要回调的方法。所以你要确定这个方法所需要传入的参数。
/**
* <pre>
* 创建一个接口来作为回调函数的传递者
* </pre>
* @author Leoly
* @version 1.0, 2012/3/1
*/
public interface IEventCallBack
{
/**
* <pre>
* 需要回调的方法
* </pre>
* @param sayWhat String
*/
void call(String sayWhat);
}
2、让我们来测试回调方法是怎么“回”调的吧。
public class TestCallBack
{
public void doSomething(IEventCallBack callBack)
{
System.out.println("Something is done!");
callBack.call("Call back method is called!");
}
public static void main(String[] args)
{
TestCallBack call = new TestCallBack();
// 使用有回调的方法时,传入接口,并临时实现这个回调方法
call.doSomething(new IEventCallBack()
{
@Override
public void call(String sayWhat)
{
System.out.println(sayWhat);
}
});
}
}
Something is done!
Call back method is called!
正是我们想要的!
回头想想,其实JS中的回调和JAVA中的回调还是有一定相似之处的,比如你处理一个点击事件,传入一个function,而这个function是你在fireEvent方法中的参数中声明的,这和在JAVA中传入一个接口,而这个接口相当于一个匿名内部类被传入,这不是很相似吗???