有没有一种简单的方法可以从内部类调用父超级函数?

时间:2021-05-03 17:00:54

标签: kotlin

我有以下代码

class DrawingActivity : AppCompatActivity() {


    private inner class ImageInfoObserver : Observer<ImageInfo> {
        override fun onChanged(imageInfo: ImageInfo?) {
            // Is there a way to perform DrawingActivity.super.finish() ?
            superFinish()
        }
    }

    fun superFinish() {
        super.finish()
    }
    
    override fun finish() {
        ...
        super.finish()
    }

目前,我需要专门创建superFinish()函数,以便内部类ImageInfoObserver调用DrawingActivity.super.finish()

我想知道,有没有更简单的方法来实现这一点,而无需创建 superFinish()

1 个答案:

答案 0 :(得分:1)

您以与访问 DrawingActivity 相同的方式执行此操作 - 但您使用 this@DrawingActivity 代替 super@DrawingActivity。所以

super@DrawingActivity.finish()

就像从 super.finish() 内部调用 DrawingActivitydocs have an example 也是。

您是否有任何理由不想在实际课程中调用 finish()? (即this@DrawingActivity.finish())为什么要跳过DrawingActivity自己的finish代码?如果有充分的理由,可能值得在覆盖的 finish() 函数中以某些状态变量为条件制作额外代码。

这样就可以清楚地了解什么时候发生某些事情,什么时候不发生,并且所有的完成拆卸逻辑都在一个地方处理。