用lambda表达式去表示java中的匿名类实例
在使用java去给一个按钮设置监听我们通常会通过创建匿名类实例,如下
Button.setOnClickListener(new OnClickListener()){
@Override
public void onClick(View v){
Toast.makeText(this,"Hello World",Toast.LENGTH_LONG).show()
}
}
在kotlin我们可以通过传递一个lambda表达式去代替这个实例
btn_test.setOnClickListener { view : View ->
Toast.makeText(this,"Hello World",Toast.LENGTH_LONG).show()
}
可以以这种方式去实现的原因是OnClickListener接口只有一个抽象方法,这种接口在kotlin中被当作函数式接口,或者SAM接口,SAM代表单抽象方法,类似的还有像Runnable和Callable这样的函数式接口.
把lambda当作参数传递给Java方法
我们在java中定义一个
void postponeComputation(int delay,Runnable computation){
}
然后使用lambda表达式去传递Runnable这个参数
postponeComputation(1000){
print("hello world")
}
注意这个lambda实参编译器会自动把它转换成一个Runnable实例. 这