“自动关闭”为空时的“试用资源”
2022-08-31 13:12:53
try-with 功能如何为已声明的变量工作?AutoCloseable
null
我以为当它尝试在变量上调用时,这会导致空指针异常,但它没有问题:close
try (BufferedReader br = null){
System.out.println("Test");
}
catch (IOException e){
e.printStackTrace();
}
try-with 功能如何为已声明的变量工作?AutoCloseable
null
我以为当它尝试在变量上调用时,这会导致空指针异常,但它没有问题:close
try (BufferedReader br = null){
System.out.println("Test");
}
catch (IOException e){
e.printStackTrace();
}
Java 语言规范指定仅当非空时才关闭它,在 14.20.3 节中。
仅当资源初始化为非空值时,才会关闭资源。
这实际上很有用,因为有时资源可能存在,而其他资源则不存在。
例如,假设您可能有也可能没有指向某些远程日志记录系统的可关闭代理。
try ( IRemoteLogger remoteLogger = getRemoteLoggerMaybe() ) {
if ( null != remoteLogger ) {
...
}
}
如果引用不为 null,则远程记录器代理将关闭,正如我们预期的那样。但是,如果引用为 null,则不会尝试在其上调用 close(),也不会引发 NullPointerException,并且代码仍然有效。