如何在 kotlin 中实现 finalize()?
今天,我正在 kotlin 中实现一个,就像我过去在 java 中所做的那样,我想实现一个作为最后的手段回退,以防客户端代码忘记关闭它,从而导致关键资源未回收。我认为此资源对于添加此回退至关重要,尽管此回退不可靠。但是,不声明方法,这意味着我不能简单地这样做:Closeable
finalize()
kotlin.Any
finalize
class Resource: Closeable {
fun close() {}
override fun finalize() { close()}
}
这并不好,至少没有达到应有的水平。现在我恢复到普通的Java作为解决方法。有谁知道如何在纯 Kotlin 中做到这一点?
PS:我目前的解决方法:
已定稿可关闭.java:
public abstract class FinalizedCloseable implement Closeable {
@Override protected void finalize() { close(); }
}
Kotlin:
class Resource: FinalizedCloseable(), Closeable {
fun close() {}
override fun finalize() { close()}
}
但此解决方法需要一个超类。如果下次我的另一个人已经得到了一个超类,如果没有大量的样板,这个解决方法将不起作用。Resource
编辑:现在我知道如何实现finalize(),但是IDEA kotlin插件不够聪明,不知道这是一个终结器,因此用一些警告标记它。在挣扎了一会儿之后,我发现了如何抑制这些警告,我想分享一下:
class C {
@Suppress("ProtectedInFinal", "Unused") protected fun finalize() {}
}