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

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

* 

Note that unlike the {@link java.io.Closeable#close close} * method of {@link java.io.Closeable}, this {@code close} method * is not required to be idempotent. In other words, * calling this {@code close} method more than once may have some * visible side effect, unlike {@code Closeable.close} which is * required to have no effect if called more than once.

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

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

因此,如果您关闭此对象一次并关闭,则您没有足够的信息来确定它是否是幂等的。 但是,如果你关闭它两次,并且它第一次关闭,但第二次它抛出一个exception,它显然不是幂等的。 另一方面,如果你关闭它一次,然后关闭它两次,第二次闭合导致项目以相同的方式保持关闭(也许它是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()方法将被视为幂等的。

我将解释基本概念:

什么是幂等?

爱因斯坦对inde inde definition的定义

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

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

幂等性的例子

尝试1

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

每次都有相同的结果。

回答你的问题..

……如果它是一种幂等方法,那么关闭两次不应该有任何副作用…..就这么简单! 希望这有助于某人。

JAVA词汇表幂等

如果以这样的方式编写方法,即对同一方法的重复调用不会导致重复更新,则该方法被称为“ 幂等”

在数学中,幂等元素或简称幂等元素,当它本身成倍增加时,它就是结果。 例如,幂等的唯一两个实数是0和1。

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

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