这里以点击事件为例子
java中,setOnClickListener后面需要传入OnClickListener接口对应的对象
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
doSomething()
}
});
直接通过机器转化为kotlin代码:
button.setOnClickListener(object : View.OnClickListener{
override fun onClick(v: View?) {
doSomething()
}
})
这种写法明显体现不了kotlin语言简洁的优势,通过优化写法,我们在kotlin中写点击事件时只需要写为:
button.setOnClickListener{doSomething()}
那么,接口做为参数时的各种情况下应该如何写呢,这里我总结了下:
kotlin接口写法总结:
一个原则,三个优化:
原则:
接口作为参数时参数位置替换为此写法:{参数1,参数2 ... -> {需要运行的方法}}
优化:
1.当接口做参数位于最后一个参数时,可以提到小括号外面
2.如果是唯一参数,甚至可以省略小括号
3.当接口的回调方法参数只有一个时,参数和函数推导符可以省略,默认it为其参数
例子1:
dailog的取消按钮大家都很熟悉:
public Builder setNegativeButton(CharSequence text, final OnClickListener listener)
interface OnClickListener {
void onClick(DialogInterface dialog, int which);
}
一个原则:
builder.setNegativeButton("取消", {dialog, which -> dialog.dismiss()})
第一点优化:
builder.setNegativeButton("取消"){dialog, which -> dialog.dismiss()}
例子2:
普通button的点击事件:
public void setOnClickListener(OnClickListener l)
public interface OnClickListener {
void onClick(View v);
}
一个原则
button.setOnClickListener({v -> doSomething()})
第一点优化:
button.setOnClickListener(){v -> doSomething()}
第二点优化:
button.setOnClickListener{v -> doSomething()}
第三点优化(doSomething中可以直接使用it代替v):
button.setOnClickListener{doSomething()}
注意:
lambda表达式在java和kotlin中写法是不一样的
java中是下面的表达式,而kotlin中下面的写法是不行的
button.setOnClickListener(v -> {doSomething()})