如何实现Constructor /析构函数对称,适用于Java

问题描述 投票:0回答:2

来自C ++背景,我喜欢在构造和破坏对象时有某种“对称性”。例如,construtor分配资源,附加事件处理程序,析构函数以与构造函数相反的顺序分离事件处理程序并释放资源。

在C#中,我通常使用“Dispose”模式来创建该行为。我没有使用析构函数,因为后者可能是从一个随机线程调用的(据我所知),如果我的对象的解构包含UI调用,这可能是一个问题。

我怎么能在Java中模仿这种行为? Java不适合这样做吗? Java是否支持另一种方法而不是这种方法?我不想以与设计使用的方式不同的方式使用Java。

我搜索了SO,但是人们说没有析构函数(我已经知道)或类似Dispose的方法。有没有办法实现构建/销毁“symetry”而没有垃圾收集器从随机线程调用的销毁部分?还是我以错误的方式看待事物?谢谢。

java destructor dispose finalizer
2个回答
2
投票

与您正在寻找的最接近的是实现Closeable或AutoCloseable,然后在try-with-resources块中使用您的类(或者在finally块中自己调用.close())。但要确保你这样做是为了那些实际上需要清理的稀缺资源。


2
投票

这里的根本区别在于,当您的对象被垃圾收集器收集时,您无法控制Java。更糟糕的是,甚至没有保证在收集对象之前实际调用finalize()方法。

因此,真正的答案是:Java不提供这种对称程度!

正如另一个答案所暗示的那样,实现“一定程度的控制”的最接近的语言功能实际上是实现AutoCloseable接口。

© www.soinside.com 2019 - 2024. All rights reserved.