gpt4 book ai didi

java - 如何在 kotlin 中实现 finalize()?

转载 作者:IT老高 更新时间:2023-10-28 13:32:05 31 4
gpt4 key购买 nike

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

class Resource: Closeable {
fun close() {}
override fun finalize() { close()}
}

这不好,至少没有它应该的那么好。现在我恢复到纯 Java 作为一种解决方法。有谁知道如何在纯 Kotlin 中做到这一点?

PS:我目前的解决方法:

FinalizedCloseable.java:

public abstract class FinalizedCloseable implement Closeable {
@Override protected void finalize() { close(); }
}

Kotlin :

class Resource: FinalizedCloseable(), Closeable {
fun close() {}
override fun finalize() { close()}
}

但是这种解决方法需要一个父类(super class)。如果下次我的其他 Resource 已经有了父类(super class),那么如果没有大量样板文件,这种解决方法将无法工作。


编辑:现在我知道如何实现 finalize(),但是 IDEA kotlin 插件不够聪明,无法知道这是一个终结器,因此用一些警告标记它。苦苦挣扎了一阵子,终于找到了如何抑制这些警告,特地分享一下:

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

最佳答案

official documentation涵盖了这个。

To override finalize(), all you need to do is simply declare it, without using the override keyword:

class C {
protected fun finalize() {
// finalization logic
}
}

关于java - 如何在 kotlin 中实现 finalize()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43784161/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com