autocloseable习语上可能的空指针异常

P45*_*ent 11 java try-with-resources

考虑以下try-with-resources块:

try (Foo foo = getAFoo()) {

}
Run Code Online (Sandbox Code Playgroud)

对于某些Foo实现的类java.lang.AutoCloseable.

如果getAFoo()要返回null,那么是否会在结束括号上抛出空指针异常(由于运行时试图调用close)?

Jon*_*Lam 12

根据这个Oracle博客:

经过充分考虑后,JSR 334专家组已决定对null资源上的try-with-resources语句的语义应更改如下:编译器生成的关闭资源的调用仅在资源为非null时才会发生.

这意味着您可以关闭(带有资源)块null中的任何资源try而不会抛出错误(当程序在try结束时自动尝试关闭资源时也是如此).