Functional programming 如何在Kotlin中将函数声明为变量
所以我试图在Kotlin中创建一个侦听器。我只想传递一个方法,该方法将在以后的代码中执行。像这样:Functional programming 如何在Kotlin中将函数声明为变量,functional-programming,kotlin,listener,Functional Programming,Kotlin,Listener,所以我试图在Kotlin中创建一个侦听器。我只想传递一个方法,该方法将在以后的代码中执行。像这样: override fun setButtonClickListener(listener: (text: String) -> Unit) { this.listener = listener } 但是,当我声明我的侦听器时,我必须这样声明: private var listener : (text: String) -> Unit = null!! 否则我会抱怨的。但是这
override fun setButtonClickListener(listener: (text: String) -> Unit) {
this.listener = listener
}
但是,当我声明我的侦听器时,我必须这样声明:
private var listener : (text: String) -> Unit = null!!
否则我会抱怨的。但是这个!!在一个空对象中,接缝非常奇怪。我应该如何声明此侦听器
谢谢 在kotlin中有很多方法可以将函数声明为变量 您可以在以后使用初始化属性,例如:
private lateinit var listener : (text: String) -> Unit
private var listener : (String) -> Unit = {}
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()
或使侦听器
为空,但必须使用:listener?调用它。用以下方式处理(…)
:
private var listener : ((text: String) -> Unit)? = null
或使用空lambda声明它以避免NPException,例如:
private lateinit var listener : (text: String) -> Unit
private var listener : (String) -> Unit = {}
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()
或声明一个私有函数,然后您可以引用它,例如:
private lateinit var listener : (text: String) -> Unit
private var listener : (String) -> Unit = {}
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()
注意:声明函数变量时,参数名称是可选的,例如:
private lateinit var listener : (text: String) -> Unit
private var listener : (String) -> Unit = {}
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()
谢谢我工作很好。在文档中很难找到这个…@LeandroBorgesFerreira一点也不。