问题描述
@Override
protected void finalize() throws Throwable {
try {
release();
} finally {
super.finalize();
}
}
在official documentation中,我发现了这一点:
protected fun finalize() {
// finalization logic
}
我这样使用:
protected fun finalize(){
try{
release()
}finally {
super.finalize() <--- But Android Studio does not recognize finalize()
}
}
仅删除super.finalize()
可以吗?我已阅读以下SO线程,但找不到解决方案:
解决方法
没有super.finalize()
方法可以调用,因为您是Any
的子类,而不是Object
的子类。 Any
没有finalize()
方法。您也不需要在Java中对Object
进行此操作,因为基本实现不会执行任何操作。
您永远不应依赖finalize
,而应将您的课程设为AutoCloseable
。无法保证将调用您的finalize方法,该方法很慢并且可能会引入安全问题。注意finalize
在Java9(https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html)中已被弃用。
对于自动关闭功能,请选中https://docs.oracle.com/javase/8/docs/api/java/lang/AutoCloseable.html
然后您将可以在Kotlin中使用use
:
class MyClass: AutoCloseable {
override fun close() {
// Release here
}
}
fun main() {
MyClass().use {
// Do the work,close will be called for you
}
}