如何在kotlin中实现finalize()?

今天,我在Closeable中实现了一个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(); } } 

科特林:

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

但是这个解决方法需要一个超类。 如果下一次我的其他Resource已经有一个超类,这个解决方法不会没有很多样板。


编辑:现在我知道如何实现finalize(),但IDEA kotlin插件是不够聪明,知道这是一个终结器,因此用一些警告标记。 经过一段时间的努力之后,我发现如何抑制这些警告,我想分享一下:

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

官方文件涵盖了这一点。

要覆盖finalize(),只需要声明它,而不使用override关键字:

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