Functional programming 如何在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!! 否则我会抱怨的。但是这

所以我试图在Kotlin中创建一个侦听器。我只想传递一个方法,该方法将在以后的代码中执行。像这样:

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一点也不。