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