可自动关闭的惯用语可能出现空指针异常

Posted

技术标签:

【中文标题】可自动关闭的惯用语可能出现空指针异常【英文标题】:Possible null pointer exception on autocloseable idiom 【发布时间】:2015-11-13 12:14:46 【问题描述】:

考虑以下 try-with-resources 块:

try (Foo foo = getAFoo()) 


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

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

【问题讨论】:

【参考方案1】:

根据this Oracle blog:

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于可自动关闭的惯用语可能出现空指针异常的主要内容,如果未能解决你的问题,请参考以下文章

ResultSet 关闭后不允许出现 ResultSet、空指针异常和 SQLException 操作

Springboot单元测试调用Service或Dao方法出现空指针异常

Springboot单元测试调用Service或Dao方法出现空指针异常

NULL空指针常见情况(修复和定位)

NULL空指针常见情况(修复和定位)

如何解决空指针异常和 ThreadException 中的错误android