从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的向后兼容性规则,因为有人可能会在不知情的情况下将其异常抑制并且程序不能正常运行
答案 0 :(得分:3)
不,这不会破坏向后兼容性。 "尝试使用资源"功能是Java 7中的新功能;旧代码无法调用它。依赖于捕获close
引发的异常的任何旧代码仍将使用普通的" try-catch"阻止,例外不会被抑制,因为它不会使用"尝试使用资源"。这样的块将无法转换为"尝试使用资源"因为抑制,但它仍然可以正常工作。