Как объявить функцию в качестве переменной в Kotlin

Поэтому я пытаюсь создать слушателя в Котлине. Я просто хочу передать метод, который будет выполнен последним в моем коде. Как это:

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

Но, когда я объявляю своего слушателя, я должен сказать следующее:

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

В противном случае моя AS будет жаловаться. Но это !! в пустых объектных швах так странно. Как объявить этого слушателя?

Благодаря!

Solutions Collecting From Web of "Как объявить функцию в качестве переменной в Kotlin"

существует много способов объявить функцию переменной в котлин.

вы можете использовать свойства lateinit для инициализации свойства позже, например:

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

ИЛИ сделать listener?.handle(...) , но вы должны вызвать его с помощью безопасного вызова : listener?.handle(...) следующим образом:

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

ИЛИ объявите его с пустой лямбдой, чтобы избежать исключения NPEx, например:

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