首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么是幂等方法,调用java.lang.AutoCloseable的close方法会有什么副作用?

什么是幂等方法,调用java.lang.AutoCloseable的close方法会有什么副作用?
EN

Stack Overflow用户
提问于 2013-10-11 22:01:53
回答 4查看 30.1K关注 0票数 35

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

请注意,与Closeableclose()方法不同,此close()方法不需要是幂等的。换句话说,多次调用此close方法可能会产生一些可见的副作用,这与Closeable#close()不同,后者在多次调用时不会产生任何影响。然而,强烈鼓励此接口的实现者使他们的close方法是幂等的。

他们所说的幂等方法是什么意思,两次调用这个close()方法有什么副作用?

既然接口Closeable扩展了AutoCloseable,为什么在关闭Closeable接口时看不到副作用呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-11 22:06:16

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

所以如果你关闭这个对象一次,它就关闭了,你没有足够的信息来知道它是否是幂等的。然而,如果你关闭它两次,第一次关闭,但第二次抛出异常,它显然不是幂等的。另一方面,如果您关闭它一次,然后关闭它两次,而第二个关闭导致项以相同的方式保持关闭(可能它是一个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;
  }
}

现在很明显,如果close()被调用一次或多次,则通过isClosed()返回的所有状态都将永远返回true。因此,方法close()将被认为是幂等的。

票数 40
EN

Stack Overflow用户

发布于 2017-01-05 11:01:52

没有代码的概念的解释

对于adopt Einstein's aphorism来说,如果你做同样的事情,得到不同的结果,那么这个方法就不是幂等的。

幂等性的示例

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

"No"

Same result every time。要求加薪是一个幂等操作。

HTTP请求的示例:

  • 发出get请求:如果正确实现,则无论您发出此请求多少次,都将得到相同的响应。例如,
  • 一个不是幂等的操作将发出一个创建资源的post请求-每次执行此操作时,您都会更改要将其发布到的应用程序的状态:每次都会创建一个新资源!
票数 17
EN

Stack Overflow用户

发布于 2017-02-22 14:26:55

术语表幂等

如果方法的编写方式使得对同一方法的重复调用不会导致重复更新,则该方法称为“幂等”。

在数学中,幂等元,或简称为幂等元,是指当乘以自身时,作为结果的任何东西。例如,只有0和1这两个实数是幂等的。

在用户界面设计中,如果一个按钮被多次按下,其效果与按一次按钮的效果相同,那么它可以被称为“幂等按钮”。例如,如果“暂停”按钮切换了暂停状态,那么它就不是幂等按钮。另一方面,如果多次按下它会使系统暂停,并且继续按“播放”,那么“暂停”就是幂等的。这在诸如红外遥控器和触摸屏的界面中是有用的,在这些界面中,用户可能不确定已经成功地按下了按钮,并且可能再次按下该按钮。电梯呼叫按钮也是幂等的,尽管许多人认为它们不是。

资源:-http://www.allapplabs.com/glossary/idempotent.htm

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19320115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档