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


考虑以下try-with-resources块:

try (Foo foo = getAFoo()) {

}

对于某些班级 Foo 实现 java.lang.AutoCloseable

如果 getAFoo() 回来了 null,然后在结束括号上抛出空指针异常(由于运行时试图调用 close)?


6208
2017-11-13 12:14


起源



答案:


根据 这个Oracle博客

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

这意味着你可以关闭任何 null 资源 try (使用资源)阻止而不抛出错误(当程序自动尝试关闭资源时也是如此) try 结束)。


9
2017-11-13 12:19





你实施 java.lang.AutoCloseable因此编译器会在完成时尝试关闭资源,但只有在资源处理时才会发生关闭资源的进程 non-null。所以在这种情况下,我认为不会抛出异常。


0
2017-11-13 12:25