该Closeable
接口是在 Java 5 中引入的,而该接口与语句AutoCloseable
一起出现在 Java 7中。扩展(从 Java 7 开始)接口。try-with-resources
Closeable
Autocloseable
在OCA/OCP Java SE 7 - Programmer I & II Study Guide一书中,它在第 399 页上说:
如果我们调用
close()
多次会发生什么?这取决于。对于实现AutoCloseable
的类,要求实现是幂等的。这意味着您可以close()
整天打电话,第二次及以后不会发生任何事情。[...] 对于实现 的类,Closeable
没有这样的保证。
因此,根据本文,实现AutoCloseable
需要是幂等的,而那些Closeable
不是。现在,当我查看AutoCloseable
docs.oracle.com 上的界面文档时,它说:
请注意,与 的
close
方法不同Closeable
,此关闭方法不需要是幂等的。换句话说,close
多次调用此方法可能会产生一些可见的副作用,Closeable.close
这与多次调用必须没有效果不同。
现在这与书中所写的相反。我有两个问题:
(1) 什么是正确的?docs.oracle.com 上的文档还是书?这两个接口中的哪一个需要幂等性?
(2)无论哪一个需要幂等 - 我是对的,Java实际上根本没有办法确保它是幂等的吗?如果是这样,close
幂等方法的“要求”是程序员应该做的事情,但我永远不能确定使用该接口的人确实做到了,对吧?在这种情况下,幂等性只是预言机的一个建议,对吗?