类是否可以在不实现自动关闭接口的情况下支持试用资源?



我看到任何实现AutoCloseable接口的类都可以使用try-with-resources

public interface AutoCloseable {
void close() throws Exception;
}

这是类在 Java 中支持资源尝试的唯一标准吗(我的意思是,是否有任何可能的情况,即类实现AutoCloseable接口但支持使用资源进行尝试)?

来自 Java 语言规范的 §14.20.3:

在资源规范中声明或称为资源的变量的类型必须是AutoCloseable的子类型,否则会发生编译时错误。

换句话说,只有AutoCloseable的实例才能与试用资源一起使用。


术语说明(在JLS的同一部分中也有解释)。如果您有:

try (AutoCloseable foo = ...;
AutoCloseable bar = ...) {
// do stuff...
} catch (Exception ex) {
// handle exception...
}

那么"资源规范"就是:

(AutoCloseable foo = ...;
AutoCloseable bar = ...)

并且有两个"资源":foobar.

相关内容

最新更新