回调的使用场景就是在参数还未知的时候对其进行处理,参数在其他地方定义。由于我发现很多项目中若是使用了回调的方式来实现功能,导致代码不易读,尤其是萌新很难看懂回调这种使用技巧,所以有此一文。
回调函数的demo案例如下:package com.jufanshare.demo;
public class CallbackDemo {
public static void main(String[] args) {
testFunction(new CallbackInterface() {
@Override
public void doFun(String text) {
System.out.println(text);
}
});
}
public static void testFunction(CallbackInterface callbackInterface){
callbackInterface.doFun("Hello Callback!");
}
private interface CallbackInterface{
void doFun(String text);
}
}
这段代码的执行结果如下:
你可能不太看得懂这段代码,但是其实很简单,你首先往接口的实现类方向去分析上面那段代码应该就可以理解了,就算理解不了也没关系,我一步步来帮你解析这段代码。
首先,我们定义了一个接口private interface CallbackInterface{
void doFun(String text);
}
这个接口并没有实现类,重点:这个接口作为参数传递到其他函数,如下public static void testFunction(CallbackInterface callbackInterface){
callbackInterface.doFun("Hello Callback!");
}
大家知道,Java面向对象的多态特性,我们在调用testFunction()的时候需要传递一个CallbackInterface接口对象进去,然而接口是不能实例化的,所以不能直接使用new CallbackInterface().
所以只能实例化CallbackInterface的实现类,而我们又没有定义CallbackInterface实现类,只好new一个匿名类,如下:testFunction(new CallbackInterface() {
@Override
public void doFun(String text) {
System.out.println(text);
}
});
这样就可以用回调的方式使用了参数text。
怎么样,是不是这么一解析,感觉Java回调简单了很多呢?