首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用Kotlin超类的finalize()

调用Kotlin超类的finalize()
EN

Stack Overflow用户
提问于 2020-10-19 17:25:59
回答 2查看 279关注 0票数 0

我想将以下Java代码转换为Kotlin:

代码语言:javascript
复制
@Override
protected void finalize() throws Throwable {
    try {
        release();
    } finally {
        super.finalize();
    }
}

正式文件中,我发现了以下内容:

代码语言:javascript
复制
protected fun finalize() {
    // finalization logic
}

我就是这样用的:

代码语言:javascript
复制
protected fun finalize(){
    try{
        release()
    }finally {
        super.finalize()   <--- But Android Studio does not recognize finalize()
    }
}

我只要删除super.finalize()就行了吗?我读过以下这样的线程,但没有找到解决方案:

EN

回答 2

Stack Overflow用户

发布于 2020-10-19 17:42:50

没有可以调用的super.finalize()方法,因为您正在子类Any,而不是ObjectAny没有finalize()方法。您也不需要在Java中对Object执行此操作,因为基本实现不会执行任何操作。

票数 1
EN

Stack Overflow用户

发布于 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

代码语言:javascript
复制
class MyClass: AutoCloseable {
    override fun close() {
        // Release here
    }
}

fun main() {
    MyClass().use {
        // Do the work, close will be called for you
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64432395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档