我有一个java类,它已经分配了必须关闭的资源。我真的不知道如何强制执行此操作,我当前的方法是实现接口AutoCloseable
,希望调用者有时会调用close()
并添加boolean
已关闭,并在每个方法的开头,如果true
,则方法抛出IllegalStateException
。
调用者必须调用close()
并且我必须在每个方法的开头检查已关闭并不是很好,是否有一些最佳做法可以避免这种情况?
答案 0 :(得分:2)
在您的情况下,使您的类实现接口AutoCloseable
是一种很好的方法,因为它允许在try-with-resource
语句中使用它。
如果出于某种原因,您希望限制对象实例未正确关闭以避免泄漏的风险,您可以覆盖下一个finalize
方法:
@Override
protected void finalize() throws Throwable {
try {
this.close();
} finally {
super.finalize();
}
}
警告1:实施finalize
方法必须非常谨慎,因为它会降低GC的工作速度,因此您需要确保代码快速执行。
警告2 :finalize
方法无需调用,因此不要依赖close
您的对象,这只会降低风险,您对象的用户仍然有责任close
正确使用它。