如何在Kotlin中声明一个函数作为variables
所以我试图在Kotlin中创建一个监听器。 我只想传递一个将在我的代码中执行的方法。 喜欢这个:
override fun setButtonClickListener(listener: (text: String) -> Unit) { this.listener = listener }
但是,当我宣布我的听众,我必须这样声明:
private var listener : (text: String) -> Unit = null!!
否则,我的AS会抱怨。 但是这个 !! 在一个空对象接缝很奇怪。 我应该如何声明这个监听器?
谢谢!
有许多方法可以在kotlin中声明一个函数作为variables。
您可以使用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 = {}
或者声明一个私有函数,然后你可以通过函数引用expression式来引用它,例如:
private var listener = this::handle private fun handle(text:String) = TODO()
注意 :当你声明一个函数variables时,参数名是可选的,例如:
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) }