如何在Kotlin中将函数声明为变量

时间:2017-07-07 14:03:05

标签: functional-programming kotlin listener

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

override fun setButtonClickListener(listener: (text: String) -> Unit) {
    this.listener = listener
}

但是,当我宣布我的听众时,我必须这样声明:

private var listener : (text: String) -> Unit = null!!

否则我的AS会抱怨。但是这个 !!在一个null对象接缝这么奇怪。我应该如何声明这个监听器?

谢谢!

1 个答案:

答案 0 :(得分:13)

有许多方法可以将函数声明为kotlin中的变量。

您可以稍后使用lateinit properties初始化属性,例如:

private lateinit var listener : (text: String) -> Unit

使listener可以为空,但您必须使用safe-calllistener?.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()