考虑以下try-with-resources块:
try (Foo foo = getAFoo()) {
}
对于实现Foo
的某个班级java.lang.AutoCloseable
。
如果getAFoo()
要返回null
,那么是否会在结束括号上抛出空指针异常(由于运行时试图调用close
)?
答案 0 :(得分:11)
经过充分考虑后,JSR 334专家组已决定对null资源上的try-with-resources语句的语义应更改如下:编译器生成的关闭资源的调用仅在资源为非资源时才会发生-null。
这意味着您可以关闭import sys, getopt
opts, args = getopt.getopt(sys.argv[1:],'hs:c:i:I')
opts = dict(opts)
print opts
print args
if '-s-' in opts:
print opts['-s']
(带资源)块中的任何{}
['python', 'Practice5.py', '-s', 'stop_list.txt', '-c', 'documents.txt', '-i', 'index.txt', '-I']
资源而不会抛出错误(当程序自动尝试关闭资源时{{1}结束)。
答案 1 :(得分:-1)
您实现java.lang.AutoCloseable
,因此编译器将在完成时尝试关闭资源,但只有在资源为non-null
时才会发生关闭资源的进程。所以在这种情况下,我认为不会抛出异常。