繁体   English   中英

为什么要引入Autocloseable而不是在Closeable中扩展可能的异常

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM