Kotlin: Внутренний масштаб – этот

Я просто использовал авторефлятор Kotlins, и это в основном оставило меня с этим:

coverView.viewTreeObserver.addOnPreDrawListener { coverView.viewTreeObserver.removeOnPreDrawListener(this) true } 

Что не работает. IntelliJ показывает мне, что this относится к внешнему классу, но не к OnPreDrawListener. Почему это? Котлинские документы говорят, что это всегда относится к внутренней области.

Чтобы исправить код, вы можете использовать object expression вместо lambda здесь:

 coverView.viewTreeObserver.addOnPreDrawListener(object : ViewTreeObserver.OnPreDrawListener { override fun onPreDraw(): Boolean { coverView.viewTreeObserver.removeOnPreDrawListener(this) return true } }) 

this выражение в выражении функции (и lambda, которое вы передаете методу addOnPreDrawListener является выражением функции) позволяет вам получить доступ к закрытию лямбда, т. е. переменным, объявленным в его самой внешней области, а не самой лямбда.

Intereting Posts
Тест модуля Kotlin не обнаруживает интерфейс зависимостей модуля Как получить значение перечисления типа raw из класса enum и строки в kotlin Как проверить, отсортирован ли массив строк в алфавитном порядке или нет с помощью Kotlin? NoClassDefFoundError для класса Kotlin в тесте JUnit во время выполнения Kotlin by Lazy в пользовательских представлениях Как заполнить список с помощью Kotlin, retrofit и RXjava Получение информации KProperty изнутри делегированной собственности вне функций getValue () и setValue () Мутидекс и Котлин DBFlow: могу ли я удалить один из них с отключением списка? Доступ к царству из неправильной нити в Espresso как реализовать Switch, используя привязку данных в android Изменение цвета кнопок и цветов progressbar с помощью Anko В Kotlin Как я могу преобразовать Int? к Int Почему Mockito не может высмеивать общий тип параметра с типом номера в Kotlin? Kotlin – Ограничить расширение метода расширения