Intereting Posts
Неразрешенная ссылка: SpringExtension с использованием @ExtendWith аннотации В чем разница между нормальным классом и классом данных в котлине где поставить скрипт, который запускается во всех / некоторых действиях в android? Переопределение функции с дженериками в котлине Java / Kotlin: Почему разборки Джексона датируются иначе, чем SimpleDateFormat? kotlin android начать новую услугу java.lang.NoClassDefFoundError: kotlin / jvm / internal / Intrinsics в libgdx Тестирование бесконечного интервала RxJava Преобразование Any в ArrayList в Котлине, дооснащение Автоматическое обновление версии библиотеки для проектов Gradle в настоящее время не поддерживается. Обновите файл build.gradle вручную. Ошибка при использовании Glide с kotlin Ввод элемента в HashMap с интерфейсом карты Библиотека Android, написанная в Kotlin, обеспечивает поддержку Java-приложений Как инициализировать поток в Котлине? Почему этот объект Котлин может наследовать от себя?

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

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

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

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

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

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

Благодаря!

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

вы можете использовать свойства 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) }