考虑以下try-with-resources块:
try (Foo foo = getAFoo()) {
}
对于某些班级 Foo
实现 java.lang.AutoCloseable
。
如果 getAFoo()
回来了 null
,然后在结束括号上抛出空指针异常(由于运行时试图调用 close
)?
考虑以下try-with-resources块:
try (Foo foo = getAFoo()) {
}
对于某些班级 Foo
实现 java.lang.AutoCloseable
。
如果 getAFoo()
回来了 null
,然后在结束括号上抛出空指针异常(由于运行时试图调用 close
)?
根据 这个Oracle博客:
经过充分考虑后,JSR 334专家组已决定对null资源上的try-with-resources语句的语义应更改如下:编译器生成的关闭资源的调用仅在资源为非null时才会发生。
这意味着你可以关闭任何 null
资源 try
(使用资源)阻止而不抛出错误(当程序自动尝试关闭资源时也是如此) try
结束)。
你实施 java.lang.AutoCloseable
因此编译器会在完成时尝试关闭资源,但只有在资源处理时才会发生关闭资源的进程 non-null
。所以在这种情况下,我认为不会抛出异常。