从Java 7开始,对Closeable
接口进行了改进以扩展AutoCloseable
接口,以便所有实现Closeable
接口的类都可以使用try-with-resources
语句工作。到现在为止,Closeable接口可以随意抛出任何异常,包括InterrruptedException。
但是,对于Java 7,在退出try块后自动调用close方法时,在try-with-resources
语句中使用的Closeable接口的任何实例都可能引发InterruptedException,并且其InterruptedException
可能会被隐式调用Throwable.addSuppressed(InterruptedException);
抑制。
考虑到有人可能在不知不觉中抑制了其异常并且程序无法正常运行的情况,因此这打破了Java的向后兼容规则。
最佳答案
不,这不会破坏向后兼容性。 Java 7中新增了“尝试资源”功能;旧代码无法调用它。任何依赖于捕获close
引发的异常的旧代码仍将使用普通的“ try-catch”块,并且不会抑制该异常,因为它不会使用“ try-with-resources”。由于受到抑制,无法将这样的块转换为“尝试资源”,但它仍然可以正常工作。
关于java - AutoCloseable.close()方法是否违反Java的向后兼容性规则,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25190347/