当前位置: 首页 > 知识库问答 >
问题:

如何在Kotlin中实现finalize()?

井唯
2023-03-14

今天,我在kotlin中实现了一个closeable,正如我过去在java中所做的那样,我希望实现一个finalize(),作为最后的后退,以防客户机代码忘记关闭它,从而使关键资源无法回收。我认为此资源足够重要,可以添加此回退,尽管此回退不可靠。但是,kotlin.any没有声明finalize方法,这意味着我不能简单地做到这一点:

class Resource: Closeable {
    fun close() {}
    override fun finalize() { close()}
}
public abstract class FinalizedCloseable implement Closeable {
    @Override protected void finalize() { close(); }
}
class Resource: FinalizedCloseable(), Closeable {
    fun close() {}
    override fun finalize() { close()}
}

但是这种变通方法需要一个超类。如果下次我的其他资源已经获得了一个超类,那么如果没有大量的样板文件,这个变通方法将无法工作。

class C {
    @Suppress("ProtectedInFinal", "Unused") protected fun finalize() {}
}

共有1个答案

羊舌航
2023-03-14

官方文件涵盖了这一点。

要重写finalize(),只需简单地声明它,而无需使用override关键字:

class C {
    protected fun finalize() {
        // finalization logic
    }
}
 类似资料:
  • 嗨,我是Kotlin世界的新手。我喜欢到目前为止所看到的,并开始考虑将我们在应用程序中使用的一些库从Java转换为Kotlin。 第二次更新:问题是如何用Kotlin中的一些参数为一个简单的pojo编写一个构建器设计模式?下面的代码是我的尝试,方法是编写java代码,然后使用eclipse-kotlin-plugin转换为Kotlin。

  • 我的Kotlin项目需要一个Java注释。 不幸的是,这似乎很困难。我在这里找到了这种讨论: https://discuss.kotlinlang.org/t/intdef-and-stringdef-not-being-checked-at-compile-time/7029/3 我明白这可能是一个Lint问题。不执行编译时检查。两人都没有提出任何建议。我可以添加任何字符串作为参数。 我最终用我

  • 我有接口 然后创建了一个类,并实现了 IDE没有显示任何错误,但当我编译时,会出现以下错误 null 并且编译时错误已经消失。

  • 考虑一下问题: 我们有一个带有抽象方法的类。现在,我们希望强制此方法的每个覆盖都将执行一些参数检查或其他一些苦差事。我们希望此参数检查在所有覆盖中都相同。一种解决方案是将此行为包装在一个调用抽象方法的非抽象方法中: 我想让私有,这样的任何子类都不能在不检查其参数的情况下偶然调用它。不幸的是,这是不可能的: 错误:(9,5)Kotlin:修饰符“private”与“abstract”不兼容 Kotl

  • 问题内容: 在Java中,我可以“实现”注释。 示例Java注释: 示例Java“实现”: 尝试将其移植到Kotlin无效,因为它说注释是最终的,因此不能被继承,即以下内容将不起作用: 您如何以Kotlin方式“实现/扩展”注释?找不到Kotlin在Java方面有所不同的任何原因。欢迎提供任何有关如何解决该问题的提示,也欢迎任何告诉您原因的信息。 以下问题包含此星座的用例:动态激发CDI事件,其成

  • 在Java中,我可以“实现”注释。 示例 Java 注释: 示例 Java“实现”: 尝试将其移植到 Kotlin 不起作用,因为它说注释是最终的,因此不能被继承,即以下内容将不起作用: 如何以Kotlin的方式“实现/扩展”注释?找不到Kotlin与Java在这方面存在差异的任何原因。欢迎任何关于如何解决这个问题的提示或任何说明为什么会这样的消息来源。 以下问题包含此星座的用例:使用带有成员的限