71.高阶函数代替接口回调
2019-10-08 本文已影响0人
写代码的向日葵
1.java代码如下:
public class ButtonClick implements CallBack {
public static void main(String[] args) {
ButtonClick mother = new ButtonClick();
mother.init();
}
@Override
public void call() {
System.out.println("按钮被点击了");
}
private void init() {
Button button = new Button();
button.setmCallBack(this);
button.click();
}
}
interface CallBack {
void call();
}
class Button {
private CallBack mCallBack;
void click() {
if (mCallBack != null) {
mCallBack.call();
}
}
public void setmCallBack(CallBack callBack) {
mCallBack = callBack;
}
}
- 可以看到写起来非常繁琐,用kotlin的高阶函数,则可以简化称如下:
2.kotlin高阶函数代替函数回调
fun main(args: Array<String>) {
val button = Button()
button.action = {
println(it)
}
button.click()
}
internal class Button {
var action: ((String) -> Unit)? = null
fun click() {
action?.invoke("按钮被点击了")
}
}
- 设置一个变量接收类型为函数类型,因为kotlin中函数可以独立存在
- 回调过程的时候可以使用
action("按钮被点击了")
,但是这种情况下,不能处理action为空的情况,所以推荐使用invoke
方法