0

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

考虑到有人可能会在不知不觉中抑制其异常并且程序没有按应有的方式运行,这是否违反了 Java 的向后兼容性规则

4

1 回答 1

3

不,这不会破坏向后兼容性。“try-with-resources”特性是 Java 7 中的新特性;旧代码无法调用它。任何依赖于捕获抛出的异常的旧代码close仍将使用普通的“try-catch”块,并且不会抑制异常,因为它不会使用“try-with-resources”。由于抑制,这样的块将无法转换为“try-with-resources”,但它仍将按原样工作。

于 2014-08-07T19:18:20.250 回答