使用kotlin lambda表达式可以大大的优化java代码
举个view监听点击事件的例子
java版
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(
v.getContext(),
"Click",
Toast.LENGTH_SHORT).show();
}
});
kotlin 版
view.setOnClickListener { object : View.OnClickListener{
override fun onClick(v: View?) {
toast("Click")
}
} }
虽然toast可以使用扩展函数,但是好像也没有简化多少代码啊!
下面我们就一步一步的使用lambda表达式,看看能优化到什么程度。
首先我们先认识一下是什么lambda表达式
核心思想:
接口中包含单个函数,那么此接口可以被替代成一个函数,
使用这个函数作为另一个函数的参数声明方式
fun setOnClickListener(listener:(View)->Unit)这里listener接口就是被可以被转换成lambda表达式形式的函数,
作为setOnClickListener函数的参数。
箭头左边是参数,箭头右边是返回值。
使用lambda表达式的kotlin版
1.
我们接口的匿名实现被替代成一个方法,所以使用大括号包围
箭头左边指定参数,箭头右边返回函数执行结果。
view.setOnClickListener ({ view->toast("Click") })
2.
如果左边的参数没有使用到,我们可以省略左边的参数
view.setOnClickListener({toast("Click")})
3.
如果函数的最后一个参数是一个函数,这个函数可以移动到圆括号外面
view.setOnClickListener () {toast("Click") }
4.
最后,如果一个函数只有一个参数,我们可以省略圆括号
view.setOnClickListener {toast("Click") }
使用这种函数式变成可以让原来的java简短了5倍,并且更加容易理解它所做的事情。