结冰的离季
本帖最后由 结冰的离季 于 2021-8-19 22:02 编辑

众所周知 C++ 里面有个与构造函数相对的析构函数,可以在该对象释放时运行函数内容
我想把它实现到Kotlin里面,当我查阅资料时发现Java有个finalize()方法,可以在垃圾回收时调用。
按照kt官方文档Calling Java from Kotlin | Kotlin (kotlinlang.org)
于是我写了以下方法
  1. protected fun finalize() = print(1)
复制代码

但我试的时候,发现他不可靠,直接关服没反应(不算垃圾回收),Java一些教程也说过这个东西不可靠。


我知道Java没有析构这个概念,但它真的太好用了,所以我想问问有没有办法实现,或者类似的功能,

贺兰兰
有的,finalize() 是 java.lang.Object 的 protected 方法,你需要先 @override 然后实现它

Java 不推荐使用析构函数的原因是因为完全无法预判 GC 何时回收对象,因此析构函数的调用是不确定的

如果你一定需要使用析构函数,那么则说明你的程序设计有问题(

结冰的离季
贺兰兰 发表于 2021-8-19 22:00
有的,finalize() 是 java.lang.Object 的 protected 方法,你需要先 @override 然后实现它

Java 不推荐使 ...

c++ java kt 同时写,人嘛了,设计出来的大杂烩= =

纱夜
类似的功能
你要找的是不是AutoClose或者Closeable之类的接口

I/O Stream还有Connection之类都需要手动close 或者试试twtr

不知道"close"这个算不算类似的功能

https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html

海螺螺
本帖最后由 海螺螺 于 2021-8-19 23:26 编辑

你需要 ReferenceQueue,jdk 会有一个包装好的 Cleaner 类;关服再处理你可能想要 shutdown hook




不要用 finalize


下一页 最后一页