我有一个 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正确的责任。