当 AutoCloseable 为 null 时尝试使用资源

2024-02-15

试用功能如何发挥作用AutoCloseable已声明的变量null?

我假设这会在尝试调用时导致空指针异常close变量上,但运行没有问题:

try (BufferedReader br = null){
    System.out.println("Test");
}
catch (IOException e){
    e.printStackTrace();
}

Java 语言规范指定仅当非空时才关闭,在第14.20.3。尝试资源 https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.20.3:

仅当资源初始化为非空值时才会关闭。

当某个资源有时存在而其他资源不存在时,这实际上很有用。

例如,假设您可能有也可能没有某个远程日志系统的可关闭代理。

try ( IRemoteLogger remoteLogger = getRemoteLoggerMaybe() ) {
    if ( null != remoteLogger ) {
       ...
    }
}

如果引用非空,则远程记录器代理将关闭,正如我们所期望的那样。但如果引用为 null,则不会尝试对其调用 close(),也不会引发 NullPointerException,并且代码仍然有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 AutoCloseable 为 null 时尝试使用资源 的相关文章

随机推荐