-1

我有一个 java 类,它分配了必须关闭的资源。我真的不知道如何执行这一点,我目前的方法是实现接口AutoCloseable,希望调用者close()有时调用并添加一个boolean在每个方法开始时检查的关闭,如果true,方法 throws IllegalStateException

调用者必须调用close()并且我必须在每个方法开始时检查关闭都不是很好,是否有一些最佳实践来避免这种情况?

4

1 回答 1

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正确的责任。

于 2016-05-30T19:37:22.483 回答