如何在Kotlin中声明一个函数作为变量

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

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

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

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

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

谢谢!

有许多方法可以在kotlin中声明一个函数作为变量。

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

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

或者listener空,但是你必须用这个方法调用safe-call : listener?.handle(...)

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

或者声明一个空的lambda来避免NPException,例如:

 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() 

这是我的方式。

 fun setOnCardClickListener(listener: OnCardClickListener){ this.listener = listener } 

 adapter.setOnCardClickListener(object : OnCardClickListener { override fun onClick(link: String) { } }) 

我的界面是这样的

 interface OnCardClickListener { fun onClick(link: String) }