可自动关闭的惯用语可能出现空指针异常
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方法出现空指针异常