我看到任何实现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 = ...)
并且有两个"资源":foo
和bar
.