访问封闭类的属性

时间:2015-03-13 16:12:44

标签: singleton kotlin

如何访问封闭类的属性?我在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课程,我如何对单身人士做同样的事情?

1 个答案:

答案 0 :(得分:2)

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

作为一种解决方法,使用匿名对象,而不是单例:

class A(val foo: Int) {

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