[英]What's best practice to close resoures?
我有一个Java类,该类分配了必须关闭的资源。 我真的不知道如何执行此操作,我当前的方法是实现接口AutoCloseable
,希望调用方有时调用close()
并添加一个boolean
close()
,该boolean
在每个方法的开头都进行检查,如果为true
,则该方法抛出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
它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.