在迁移到 Kotlin
时来自 Java
我遇到了一个问题。我覆盖了 Object
的finalize()
方法:
@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/