访问封闭 class 的属性

Accessing properties of enclosing class

如何访问封闭 class 的属性?我在 Kotlin 中使用单例。

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 classes,我如何对单例执行同样的操作?

单例不能是内部的,因为它只有一个实例,而内部实例 类 保留对外部(封闭)实例的引用 类。因此,单例对象不能保存对封闭 类 的引用,也不能访问它们的属性。

作为解决方法,使用非单例的匿名对象:

class A(val foo: Int) {

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