Kotlin super.finalize()

Igo*_*ryl 5 finalize kotlin

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

@Override
protected void finalize() throws Throwable {
    stopTimer();
    super.finalize();
}
Run Code Online (Sandbox Code Playgroud)

当我尝试用 Kotlin 做同样的事情时,我找到了解决方案。第一个来自文档:

 protected fun finalize() {
    stopTimer()
    super.finalize()
}
Run Code Online (Sandbox Code Playgroud)

文章中的第二个(俄语):

@Suppress("ProtectedInFinal", "Unused")
protected fun finalize() {
    stopTimer()
    super.finalize()
}
Run Code Online (Sandbox Code Playgroud)

但在这两种情况下,我都不能super.finalize()根据 IDE调用,正如它所说的unresolved reference:finalize

也许有人知道如何完成这项工作Kotlin?谢谢。

Mar*_*nik 6

这是finalizeJava中的合同:

Object 类的 finalize 方法不执行任何特殊操作;它只是正常返回。Object 的子类可以覆盖这个定义。

因此,您不需要调用超类。您将调用一个空的实现。

调用的需要super.finalize()只出现在不是直接从kotlin.Any.

故事的其余部分已经在官方文档中讲述了:只需声明一个protected fun finalize().