Closed. This question is opinion-based。它当前不接受答案。












想要改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。

2年前关闭。



Improve this question



AutoCloseable在jdk1.7中引入,而Cloesable已在jdk1.5中引入。

并根据https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html



因此,Closeable实例已经可以在try-with-resources语句中视为资源。这是肯定的,因为Closeable是从AutoCloseable扩展的。

我的问题是,为什么Java专门引入了AutoCloseable,为什么它们不只使Closet在try-with-resources中受支持,除了try-with-resources之外,还有其他其他方式可以使用AutoCloseable吗?

最佳答案

Closeable被限制为抛出IOException,这可能不适用于某些可关闭但不受IO约束的资源。

声明AutoCloseable抛出Exception,使其更具通用性。
Closeable的API不能更改为抛出Exception,因为这将是一个重大更改,因此是新的 super 接口(interface)。

另外,作为documented:



因此,尽管每个Closeable都是Autocloseable,但事实并非如此,将try-catch-finally最终限制为Closeable的语义将受到限制。

10-06 09:35