所以我想在Kotlin中创建一个监听器。我只想传递一个将在我的代码中执行的方法。像这样:
override fun setButtonClickListener(listener: (text: String) -> Unit) {
this.listener = listener
}
但是,当我宣布我的听众时,我必须这样声明:
private var listener : (text: String) -> Unit = null!!
否则我的AS会抱怨。但是这个 !!在一个null对象接缝这么奇怪。我应该如何声明这个监听器?
谢谢!
答案 0 :(得分:13)
有许多方法可以将函数声明为kotlin中的变量。
您可以稍后使用lateinit properties初始化属性,例如:
private lateinit var listener : (text: String) -> Unit
或使listener
可以为空,但您必须使用safe-call:listener?.handle(...)
以这种方式调用它:
private var listener : ((text: String) -> Unit)? = null
OR 使用空lambda声明它以避免NPException,例如:
private var listener : (String) -> Unit = {}
OR 声明私有函数,然后您可以通过function reference expression引用它,例如:
private var listener = this::handle
private fun handle(text:String) = TODO()
注意:声明函数变量时,参数名称是可选的,例如:
private var listener : (text:String) -> Unit = TODO()
// |--- parameter name is omitted
private var listener : (String) -> Unit = TODO()