Lea*_*ira 4 functional-programming listener kotlin
所以我想在Kotlin创建一个监听器.我只想传递一个将在我的代码中执行的方法.像这样:
override fun setButtonClickListener(listener: (text: String) -> Unit) {
this.listener = listener
}
Run Code Online (Sandbox Code Playgroud)
但是,当我宣布我的听众时,我必须这样声明:
private var listener : (text: String) -> Unit = null!!
Run Code Online (Sandbox Code Playgroud)
否则我的AS会抱怨.但是这个 !!在一个null对象接缝这么奇怪.我该如何声明这个监听器?
谢谢!
hol*_*ava 16
有很多方法可以将函数声明为kotlin中的变量.
您可以使用lateinit属性在以后初始化属性,例如:
private lateinit var listener : (text: String) -> Unit
Run Code Online (Sandbox Code Playgroud)
或者可以为listener空,但你必须使用安全调用来调用它:listener?.handle(...)这样:
private var listener : ((text: String) -> Unit)? = null
Run Code Online (Sandbox Code Playgroud)
或者使用空lambda声明它以避免NPException,例如:
private var listener : (String) -> Unit = {}
Run Code Online (Sandbox Code Playgroud)
或者声明一个私有函数,然后你可以通过函数引用表达式引用它,例如:
private var listener = this::handle
private fun handle(text:String) = TODO()
Run Code Online (Sandbox Code Playgroud)
注意:声明函数变量时,参数名称是可选的,例如:
private var listener : (text:String) -> Unit = TODO()
// |--- parameter name is omitted
private var listener : (String) -> Unit = TODO()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3716 次 |
| 最近记录: |