![](/img/trans.png)
[英]Why is AutoCloseable the base interface for Closeable (and not vice versa)?
[英]Why introducing Autocloseable instead of extending the possible exceptions in Closeable
為什么他們添加AutoCloseable
並更改Closeable
,如下所示:
public interface Closeable extends AutoCloseable {
public void close() throws IOException;
}
而不是僅僅更改Closeable
如下(不添加AutoCloseable
):
public interface Closeable {
public void close() throws Exception;
}
第二種解決方案的優點是:1)沒有生成異常的限制(參見IOException
)2)可以在try-with-resources中使用Closeable
本身而不必擴展AutoCloseable
3)這不會破壞現有代碼,因為實現只能有比界面中定義的更有限的例外4)沒有過度工程
是否有任何理由相反他們決定采用第一種解決方案而不是第二種解決方案?
您根本無法更改已發布方法的已檢查例外列表。 否則舊代碼可能會破壞。 例如,在Java 7之前可能存在這樣的方法:
public void closeAll(Collection<Closeable> collection) {
for(Closeable closeable : collection) {
try {
closeable.close();
}
catch(IOException ex) {
// ignore
}
}
}
更改后,您建議此代碼不會編譯。 Java設計人員非常重視向后兼容性問題。
很好的答案@Tagir Valeev。
可關閉在system.io包中,正如Tagir所說,Closeable.close拋出IOException - 它被認為與I / O相關。 AutoCloseable在java.lang中,AutoCloseable.close拋出異常。
根據經驗,發現可靠性更為一般,而不僅僅是I / O特有的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.