Intereting Posts
Центрировать вертикально VideoView на портрете Функциональное программирование: как переносить контекст для цепочки правил проверки Kotlin werid компилирует ошибку, связанную с дженериками и автоматическим типом Kotlin: нельзя использовать GenericTypeIndicator для вызова getBalue базы данных Firebase Подкатегория Query FireStore Kotlin: Используйте лямбда вместо функционального интерфейса? Значение вида: вид Форматирование комментариев Kotlin в IntelliJ / Android Studio Intellij IDEA не показывает доступные предложения для ресурсов Android в файлах Kotlin kotlin if (bar == null) vs. bar?: run Google Espresso: удалять данные пользователя по каждому тесту Возможно ли, чтобы Java создала перегрузку метода с аргументами по умолчанию, такими как Kotlin? Тестирование с помощью spek и обмен некоторыми базовыми тестовыми примерами для базовых классов Обертывание всех внутренних методов одним и тем же пробником в Котлине Управление жизненным циклом файлов cookie в сервлете Ktor 0.9.0

Доступ к свойствам закрывающего класса

Как получить доступ к свойствам закрывающего класса? Я работаю с одиночками в Котлине.

private object IndeterminateAnimationListener : Animation.AnimationListener { override fun onAnimationStart(animation: Animation?) {} override fun onAnimationEnd(animation: Animation?) { // How do I access the properties of the enclosing // from here? } override fun onAnimationRepeat(animation: Animation?) {} } 

PS: Я могу использовать inner классы, как я могу сделать то же самое с синглонами?

Solutions Collecting From Web of "Доступ к свойствам закрывающего класса"

Синглтон не может быть внутренним, потому что есть только один его экземпляр, а экземпляры внутренних классов содержат ссылки на экземпляры внешних (охватывающих) классов. Таким образом, объекты singleton не могут содержать ссылки на закрывающие классы и не могут получить доступ к их свойствам.

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

 class A(val foo: Int) { val listener = object : AnimationListenerAdapter { override fun onAnimationEnd(animation: Animation?) { println(foo) // access to outer } } }