web-dev-qa-db-ja.com

べき等メソッドの意味と、Java.lang.AutoCloseableのcloseメソッドを呼び出した場合の副作用は何ですか?

Java.lang.AutoCloseableのclose()メソッドのJavaドキュメントは言う

Closeableclose() メソッドとは異なり、このclose()メソッドはである必要はないことに注意してくださいべき等。言い換えると、このcloseメソッドを複数回呼び出すと、Closeable#close()を2回以上呼び出しても効果がないことが必要な場合とは異なり、目に見える副作用が生じる場合があります。ただし、このインターフェイスの実装者は、closeメソッドをべき等にすることを強くお勧めします。


idempotentメソッドの意味と呼び出しの副作用このclose()メソッドを2回?

そして、インターフェースCloseableAutoCloseableを拡張するので、Closeableインターフェースの終了時に副作用が見られないのはなぜですか?

29
Aniket Thakur

べき等とは、操作を何度も適用できることを意味しますが、1つの呼び出しの結果の状態は、複数の呼び出しの結果の状態と区別できません。つまり、メソッドを複数回呼び出しても安全です。事実上、2番目と3番目(以降同様)の呼び出しは、プログラムの状態に目に見える影響を与えません。

したがって、このオブジェクトを一度閉じて閉じると、べき等であるかどうかを知るのに十分な情報がありません。ただし、2回閉じると、1回目は閉じても2回目は例外がスローされる場合、明らかにべき等ではありません。一方、一度閉じて2回閉じ、2番目の閉じた結果、アイテムが同じ方法で閉じられたままになる場合(おそらく何もしない)は、べき等です。

べき等Closeableを作成する1つの方法は次のとおりです。

_public class Example implements Closeable {

  private boolean closed;

  public Example() {
    closed = false;
  }

  public void close() {
    if (!isClosed()) {
      closed = true;
    }
  }

  public boolean isClosed() {
    return closed;
  }
}
_

close()が1回または複数回呼び出された場合、isClosed()を介した状態のすべての戻りが永久にtrueを返すことは明らかです。したがって、メソッドclose()はべき等と見なされます。

33
Edwin Buck

コードなしの概念の説明

Einsteins definition of indempotency

アインシュタインの格言を採用するには、同じことを行い、異なる結果が得られる場合、その方法はべき等ではありません。

べき等の例

"Please sir, can I have a pay rise?"

"No"

毎回同じ結果。昇給を求めることはべき等の操作です。

HTTPリクエストの例:

  • getリクエストの作成:適切に実装されている場合、このリクエストを何回行っても、同じ応答が返されます。
  • たとえば、べき等ではない操作は、リソースを作成するためのpostリクエストを作成することになります-これを行うたびに、投稿先のアプリケーションの状態が変更されます。新しいリソースは毎回作成されました!

あなたの質問への答え:

...べき等メソッドである場合、2回閉じることによる副作用はありません。

7
BKSpurgeon

Java用語集のべき等

同じメソッドを繰り返し呼び出しても重複して更新されないようにメソッドが記述されている場合、そのメソッドは "idempotent"と呼ばれます。

数学では、べき等要素、または略してべき等は、それ自体で乗算すると、結果としてそれ自体を与えるものです。たとえば、べき等である2つの実数は0と1だけです。

ユーザーインターフェースの設計では、ボタンを2回以上押すとボタンを1回押すのと同じ効果がある場合、ボタンを「べき等」と呼ぶことができます。たとえば、「一時停止」ボタンは、一時停止状態を切り替える場合、べき等ではありません。一方、複数回押してもシステムが一時停止し、「再生」を押すと再開した場合、「一時停止」はべき等です。これは、赤外線リモコンやタッチスクリーンなど、ユーザーがボタンを正常に押したことがわからず、もう一度押す可能性があるインターフェイスで役立ちます。エレベーター呼び出しボタンもべき等ですが、多くの人はそうではないと考えています。

リソース:- http://www.allapplabs.com/glossary/idempotent.htm

1
Rahul Agrawal