在Kotlin中调用超类的finalize

问题描述

我有以下要转换为Kotlin的Java代码

@Override
protected void finalize() throws Throwable {
    try {
        release();
    } finally {
        super.finalize();
    }
}

official documentation中,我发现了这一点:

protected fun finalize() {
    // finalization logic
}

我这样使用:

protected fun finalize(){
    try{
        release()
    }finally {
        super.finalize()   <--- But Android Studio does not recognize finalize()
    }
}

删除super.finalize()可以吗?我已阅读以下SO线程,但找不到解决方案:

解决方法

没有super.finalize()方法可以调用,因为您是Any的子类,而不是Object的子类。 Any没有finalize()方法。您也不需要在Java中对Object进行此操作,因为基本实现不会执行任何操作。

,

您永远不应依赖finalize,而应将您的课程设为AutoCloseable。无法保证将调用您的finalize方法,该方法很慢并且可能会引入安全问题。注意finalize在Java9(https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html)中已被弃用。

对于自动关闭功能,请选中https://docs.oracle.com/javase/8/docs/api/java/lang/AutoCloseable.html

然后您将可以在Kotlin中使用use

class MyClass: AutoCloseable {
    override fun close() {
        // Release here
    }
}

fun main() {
    MyClass().use {
        // Do the work,close will be called for you
    }
}