从 Kotlin 调用 Java 代码时,会有SAM 转换,因此 Java 代码如下所示:
adapter.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view, int position) {
// Do stuff here
}
});
可以是这样的:
adapter.setOnClickListener { view, position ->
// Do stuff
}
现在,我正在开发一个 Kotlin 项目,我想将功能接口定义为事件侦听器:
interface OnSomeActionListener {
fun onSomeAction(parameter1: Int, parameter2: String)
}
在SomeClass
我有一个设置监听器的函数:
...
private var onSomeActionListener: OnSomeActionListener? = null
fun setOnSomeActionListener(listener: OnSomeActionListener) {
onSomeActionListener = listener
}
...
当我创建这个类的一个实例并尝试调用 setter 函数时,我会这样做:
val thing = SomeClass()
thing.setOnSomeActionListener(object : OnSomeActionListener {
override fun onSomeAction(parameter1: Int, parameter2: String) {
// Do stuff here
}
})
我知道 Kotlin 具有函数类型,因此不支持来自各种站点的 SAM 转换,例如这个。
我已经阅读了一些关于函数类型的内容,但我之前没有使用过它们。
我将如何重写我的代码,以便我可以像这样调用 setter 函数?
val thing = SomeClass()
thing.setOnSomeActionListener { parameter1, parameter2 ->
// Do stuff here
}
.