Как получить доступ к свойствам закрывающего класса? Я работаю с одиночками в Котлине.
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
классы, как я могу сделать то же самое с синглонами?
Синглтон не может быть внутренним, потому что есть только один его экземпляр, а экземпляры внутренних классов содержат ссылки на экземпляры внешних (охватывающих) классов. Таким образом, объекты singleton не могут содержать ссылки на закрывающие классы и не могут получить доступ к их свойствам.
В качестве обходного пути используйте анонимные объекты, которые не являются одиночными:
class A(val foo: Int) { val listener = object : AnimationListenerAdapter { override fun onAnimationEnd(animation: Animation?) { println(foo) // access to outer } } }