Closeable
インターフェースはJava 5で導入されましたが、インターフェースはJava 7でステートメントAutoCloseable
とともに導入されました。(Java 7 以降)インターフェイスを拡張します。try-with-resources
Closeable
Autocloseable
『OCA/OCP Java SE 7 - Programmer I & II Study Guide』の 399 ページには、次のように書かれています。
close()
複数回呼び出すとどうなりますか? 場合によります。を実装するクラスAutoCloseable
の場合、実装はべき等である必要があります。つまりclose()
、一日中電話しても、2 回目以降は何も起こらないということです。[...] を実装するクラスCloseable
の場合、そのような保証はありません。
したがって、このテキストによると、 の実装はAutoCloseable
冪等である必要があり、そうでCloseable
ないものは必要です。AutoCloseable
docs.oracle.com でインターフェースのドキュメントを見ると、次のように書かれています。
close
のメソッドとは異なりCloseable
、この close メソッドはべき等である必要はないことに注意してください。つまり、このclose
メソッドを複数回呼び出すと、目に見える副作用が発生する可能性がありますCloseable.close
。
今、これは本に書かれていることの反対です。2 つの質問があります。
(1) 正しいのは? docs.oracle.com のドキュメントですか、それとも本ですか? べき等性が必要な 2 つのインターフェイスはどれですか?
(2) どちらが冪等である必要があるとしても、Java には冪等であることを保証する方法がまったくないというのは正しいですか? もしそうなら、メソッドが冪等であるという「要件」はclose
プログラマーがすべきことですが、インターフェイスを使用した誰かが実際にそれを行ったかどうかはわかりませんよね? この場合、冪等性は単なるオラクルの提案ですよね?