Kotlin super.finalize()

标签 kotlin finalize

在迁移到 Kotlin 时来自 Java我遇到了一个问题。我覆盖了 Objectfinalize()方法:

@Override
protected void finalize() throws Throwable {
    stopTimer();
    super.finalize();
}

当我尝试对 Kotlin 做同样的事情时,我找到了解决方案。第一个来自文档:
 protected fun finalize() {
    stopTimer()
    super.finalize()
}

第二个来自 article (是俄语):
@Suppress("ProtectedInFinal", "Unused")
protected fun finalize() {
    stopTimer()
    super.finalize()
}

但在这两种情况下,我都无法调用 super.finalize()根据 IDE,正如它所说的 unresolved reference:finalize
也许有人知道如何在 Kotlin 中完成这项工作?谢谢。

最佳答案

这是finalize 的契约(Contract)在 Java 中:

The finalize method of class Object performs no special action; it simply returns normally. Subclasses of Object may override this definition.



因此,您不需要调用父类(super class)。您将调用一个空的实现。

需要调用super.finalize()仅在不直接派生自 kotlin.Any 的类中出现.

official documentation 中已经讲述了故事的其余部分。 : 只需声明 protected fun finalize() .

关于Kotlin super.finalize(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50393502/

相关文章:

int - Kotlin 编译错误 : None of the following functions can be called with the arguments supplied

kotlin - 如何使用Kotlin以优美的方式编写空条件?

c# - 析构函数、处理方法和终结方法之间的区别

java - java中如何销毁一个对象?

java - 我很确定 Finalize 对于后来的 JVM 来说仍然是个坏消息——还有其他选择吗?

android - 如何在 kotlin android 中正确声明应用程序类

android - 如何在Android中获取日期( Kotlin )

java - Android EffectFactory 位图

java - Finalize 方法导致性能开销

java - 为什么我不能从 ReferenceQueue 中获取可终结对象的 PhantomReference?