首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Java7专门介绍AutoCloseable?

为什么Java7专门介绍AutoCloseable?
EN

Stack Overflow用户
提问于 2014-11-11 13:44:19
回答 2查看 459关注 0票数 9

AutoCloseable是在jdk1.7中引入的,Cloesable已经在jdk1.5中引入了。

根据https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html的说法

try-语句确保在语句末尾关闭每个资源。任何实现java.lang.AutoCloseable的对象,包括实现java.io.Closeable的所有对象的,都可以用作资源。

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

我的问题是为什么java专门引入了AutoCloseable,为什么它们不使try-with-resources中的支持更加接近,除了try-with-resources,AutoCloseable还有其他方法可以使用吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-11 13:48:52

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

AutoCloseable被声明为抛出Exception,这使得它更加通用。

Closeable的API不能更改为抛出Exception,因为这将是一个突破性的更改,因此出现了新的超级接口。

另外,作为documented

注意,与closeCloseable方法不同,这个关闭方法不需要是幂等的。换句话说,多次调用这个关闭方法可能会产生一些明显的副作用,与Closeable.close不同的是,如果调用不止一次,则不需要有任何效果。但是,强烈鼓励该接口的实现者使其密切的方法成为幂等的。

因此,虽然每个Closeable都是Autocloseable,但相反的情况并不是真的,而且它将限制尝试捕获--最终限制在Closeable的语义上。

票数 11
EN

Stack Overflow用户

发布于 2014-11-11 13:48:29

两者的区别在于实现Closeable的类必须保证多次调用close()没有副作用。对AutoCloseable没有这样的限制。

实际上,这意味着一切都应该是Closeable,但是那些需要修改的类可以选择限制较小的AutoCloseable

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26866326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档