AutoCloseable.close()方法是否会破坏Java的向后兼容性规则

时间:2014-08-07 19:11:30

标签: java java-7 try-with-resources autocloseable

从Java 7开始,Closeable接口已经过改进以扩展AutoCloseable接口,以便所有实现Closeable接口的类都可以使用try-with-resources语句。到目前为止,Closeable接口可以自由抛出任何异常,包括InterrruptedException。   但是,对于Java 7,try-with-resources语句中使用的任何Closeable接口实例可能会在退出try块后自动调用close方法时抛出InterruptedException,并且InterruptedException可能会被隐式调用{{Throwable.addSuppressed(InterruptedException);抑制1}}

这样做会破坏Java的向后兼容性规则,因为有人可能会在不知情的情况下将其异常抑制并且程序不能正常运行

1 个答案:

答案 0 :(得分:3)

不,这不会破坏向后兼容性。 "尝试使用资源"功能是Java 7中的新功能;旧代码无法调用它。依赖于捕获close引发的异常的任何旧代码仍将使用普通的" try-catch"阻止,例外不会被抑制,因为它不会使用"尝试使用资源"。这样的块将无法转换为"尝试使用资源"因为抑制,但它仍然可以正常工作。