我有一个 java 类,它分配了必须关闭的资源。我真的不知道如何执行这一点,我目前的方法是实现接口AutoCloseable
,希望调用者close()
有时调用并添加一个boolean
在每个方法开始时检查的关闭,如果true
,方法 throws IllegalStateException
。
调用者必须调用close()
并且我必须在每个方法开始时检查关闭都不是很好,是否有一些最佳实践来避免这种情况?
我有一个 java 类,它分配了必须关闭的资源。我真的不知道如何执行这一点,我目前的方法是实现接口AutoCloseable
,希望调用者close()
有时调用并添加一个boolean
在每个方法开始时检查的关闭,如果true
,方法 throws IllegalStateException
。
调用者必须调用close()
并且我必须在每个方法开始时检查关闭都不是很好,是否有一些最佳实践来避免这种情况?
在您的情况下,让您的类实现接口AutoCloseable
是一个好方法,因为它允许在try-with-resource
语句中使用它。
如果出于某种原因您想限制对象实例未正确关闭以避免泄漏的风险,您可以重写该finalize
方法,如下所示:
@Override
protected void finalize() throws Throwable {
try {
this.close();
} finally {
super.finalize();
}
}
警告 1:必须非常小心地实现该finalize
方法,因为它会减慢 GC 的工作,因此您需要确保您的代码能够快速执行。
警告2:该finalize
方法不是必须调用的,所以不要为close
你的对象依赖它,它只会帮助降低风险,你的对象的用户仍然对它负有close
正确的责任。