mar*_*hin 25 java api interface
据我所知,Closeable接口来自Java 1.5,AutoCloseable是在Java 1.7中引入的.
我想要了解的是为什么Closeable 扩展 AutoCloseable而不是反过来?这是因为向后依赖(无法更改Closeable接口),即AutoCloseable需要比Closeable更广泛的异常吗?或者我的逻辑是错的,它应该是那样的?
Lou*_*man 30
这样,所有Closeable自动实现的用户代码都可以实现AutoCloseable,这使得它们可以自动从try-with-resources语法中受益.
Ste*_*n C 22
@Sotirios Delimanolis的评论已经确定了它.
Java 7团队想要一种机制来将对象标记为可以自动关闭"try with resources"构造.不幸的是,该Closeable.close()方法的API规范过于严格.它要求该close()方法是幂等的......但这在"尝试用资源"用例中是不必要的.
因此,他们引入了AutoClosable界限较少的close()语义...并且Closeable作为子类型进行了复古拟合AutoCloseable.
另一件事是AutoCloseable.close()被宣布为投掷Exception而不是IOException.这意味着AutoCloseableAPI比Closeable... 更少限制,并且考虑到它在try-with-resources中被有效地用作回调 API,这使得它更灵活/更广泛适用.(API可用于与I/O无关的资源,但仍可能在关闭时抛出异常.)另一方面,如果closes() throws Exception方法已被注入,Java类型将不允许它们进行此类更改进入子类型.
替代方案可能是:
限制"尝试用资源"来限制幂等的资源......这限制了它的用处,或者
回顾性地改变...的语义,Closeable.close()这可能导致人们将旧代码移植到Java 7的困难
回顾性地改变Closeable.close()...... 的签名会破坏二进制兼容性.
| 归档时间: |
|
| 查看次数: |
6356 次 |
| 最近记录: |