我想将以下Java代码转换为Kotlin:
@Override
protected void finalize() throws Throwable {
try {
release();
} finally {
super.finalize();
}
}在正式文件中,我发现了以下内容:
protected fun finalize() {
// finalization logic
}我就是这样用的:
protected fun finalize(){
try{
release()
}finally {
super.finalize() <--- But Android Studio does not recognize finalize()
}
}我只要删除super.finalize()就行了吗?我读过以下这样的线程,但没有找到解决方案:
发布于 2020-10-19 17:42:50
没有可以调用的super.finalize()方法,因为您正在子类Any,而不是Object。Any没有finalize()方法。您也不需要在Java中对Object执行此操作,因为基本实现不会执行任何操作。
发布于 2020-10-19 17:45:14
您不应该依赖finalize,而应该使用类AutoCloseable。不能保证您的finalize方法会被调用,它很慢,可能会带来安全问题。注finalize已经在Java9 (https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html)中被废弃。
对于AutoCloseable,请检查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
}
}https://stackoverflow.com/questions/64432395
复制相似问题