25

CloseableインターフェースはJava 5で導入されましたが、インターフェースはJava 7でステートメントAutoCloseableとともに導入されました。(Java 7 以降)インターフェイスを拡張します。try-with-resourcesCloseableAutocloseable

OCA/OCP Java SE 7 - Programmer I & II Study Guide』の 399 ページには、次のように書かれています。

close()複数回呼び出すとどうなりますか? 場合によります。を実装するクラスAutoCloseableの場合、実装はべき等である必要があります。つまりclose()、一日中電話しても、2 回目以降は何も起こらないということです。[...] を実装するクラスCloseableの場合、そのような保証はありません。

したがって、このテキストによると、 の実装はAutoCloseable冪等である必要があり、そうでCloseableないものは必要です。AutoCloseabledocs.oracle.com でインターフェースのドキュメントを見ると、次のように書かれています。

closeのメソッドとは異なりCloseable、この close メソッドはべき等である必要はないことに注意してください。つまり、このcloseメソッドを複数回呼び出すと、目に見える副作用が発生する可能性がありますCloseable.close

今、これは本に書かれていることの反対です。2 つの質問があります。

(1) 正しいのは? docs.oracle.com のドキュメントですか、それとも本ですか? べき等性が必要な 2 つのインターフェイスはどれですか?

(2) どちらが冪等である必要があるとしても、Java には冪等であることを保証する方法がまったくないというのは正しいですか? もしそうなら、メソッドが冪等であるという「要件」はcloseプログラマーがすべきことですが、インターフェイスを使用した誰かが実際にそれを行ったかどうかはわかりませんよね? この場合、冪等性は単なるオラクルの提案ですよね?

4

1 に答える 1