幂等方法的含义是什么,以及在调用java.lang.AutoCloseable的close方法时有什么副作用?

Ani*_*kur 28 java idempotent autocloseable

java.lang.AutoCloseable的close()方法的Java文档说

__PRE__

它们是什么意思是幂等方法,以及两次调用这个close()方法的副作用是什么?并且由于接口Closeable扩展了AutoCloseable,为什么在Closeable接口结束时不能看到副作用?

Edw*_*uck 34

幂等意味着您可以多次应用该操作,但是一次调用的结果状态将与多次调用的结果状态无法区分.简而言之,多次调用该方法是安全的.实际上,第二次和第三次(以此类推)调用对程序的状态没有明显影响.

因此,如果您关闭此对象一次并关闭,则您没有足够的信息来确定它是否是幂等的.但是,如果你关闭它两次,并且它第一次关闭,但第二次它抛出一个异常,它显然不是幂等的.另一方面,如果你关闭它一次,并关闭它两次,第二次闭合导致项目以相同的方式保持关闭(也许它是一个noop),那么它是幂等的.

制作幂等元的一种方法Closeable可以是:

public class Example implements Closeable {

  private boolean closed;

  public Example() {
    closed = false;
  }

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

  public boolean isClosed() {
    return closed;
  }
}
Run Code Online (Sandbox Code Playgroud)

现在显而易见的是,如果close()被调用一次或多次,状态的所有返回isClosed()将永远返回true.因此,该方法close()将被视为幂等的.


BKS*_*eon 8

没有任何代码的概念的简单解释

爱因斯坦对inde inde definition的定义

"精神错乱的定义是一遍又一遍地做同样的事情,并期待不同的结果." - 艾尔伯特爱因斯坦

采用爱因斯坦的格言,这是幂等性的基本要点:一遍又一遍地做同样的事情并得到相同的结果.如果得到不同的结果,那么该方法不是幂等的.

通过日常比喻的幂等性的例子

尝试1

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

"No"
Run Code Online (Sandbox Code Playgroud)

每次都有相同的结果.要求加薪是一种幂等的操作.

示例HTTP请求:

  • 制作一个get请求:如果正确实现,那么无论你有多少次提出这一要求,你会得到同样的反应.
  • 例如,一个不是幂等的操作会发出post创建资源的请求 - 每次执行此操作时,您将更改要发布的应用程序的状态:每次都会创建一个新资源!

回答你的问题:

......如果它是幂等方法,那么关闭两次不应该有任何副作用.....

就这么简单!希望这有助于某人 - 如果不发表评论,我会尝试清除它.