with try example closable and java idempotent autocloseable

try - ¿Qué significa el método idempotent y cuáles son los efectos secundarios en caso de llamar al método close de java.lang.AutoCloseable?



implements autocloseable example (3)

Idempotente significa que puede aplicar la operación varias veces, pero el estado resultante de una llamada será indistinguible del estado resultante de múltiples llamadas. En resumen, es seguro llamar al método varias veces. Efectivamente, las llamadas segunda y tercera (y así sucesivamente) no tendrán un efecto visible en el estado del programa.

Entonces, si cierra este objeto una vez y se cierra, no tiene suficiente información para saber si es idempotente. Sin embargo, si lo cierras dos veces y la primera vez que se cierra, pero la segunda vez que lanza una excepción, claramente no es idempotente. Por otro lado, si lo cierra una vez y lo cierra dos veces, y el segundo cierre hace que el elemento permanezca cerrado de la misma manera (tal vez sea un noop), entonces es idempotente.

Una técnica para hacer un Closeable idempotente podría ser:

public class Example implements Closeable { private boolean closed; public Example() { closed = false; } public void close() { if (!isClosed()) { closed = true; } } public boolean isClosed() { return closed; } }

Donde ahora es obvio que si se llama a close() una o varias veces, todas las devoluciones del estado a través de isClosed() siempre se devolverán verdaderas. Por lo tanto, el método close() sería considerado idempotente.

Java docs del método close () de java.lang.AutoCloseable dice

* <p>Note that unlike the {@link java.io.Closeable#close close} * method of {@link java.io.Closeable}, this {@code close} method * is <em>not</em> 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.

¿Qué quieren decir con método idempotente y cuáles son los efectos secundarios de llamar a este método close () dos veces? Y como la interfaz Closeable extiende AutoCloseable, ¿por qué no se ven los efectos secundarios en el cierre de la interfaz Closeable?


Te explico el concepto básico:

¿Qué es la idempotencia?

"La definición de locura es hacer lo mismo una y otra vez y esperar resultados diferentes". - Albert Einstein

Para adoptar el aforismo de Einstein, esa es la esencia básica de la idempotencia: hacer lo mismo una y otra vez y obtener los mismos resultados. Si obtienes resultados diferentes, entonces el método no es idempotente.

Ejemplo de idempotencia

Intento 1

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

El mismo resultado cada vez.

Para responder tu pregunta..

... no debería haber ningún efecto secundario al cerrarse dos veces si es un método idempotente ... ¡y es tan simple como eso! Espero que esto ayude a alguien.


JAVA GLOSARIO Idempotente

Si los métodos se escriben de tal manera que las llamadas repetidas al mismo método no causen actualizaciones duplicadas, se dice que el método es " idempotente ".

En matemáticas, un elemento idempotente, o un idempotente para abreviar, es algo que, cuando se multiplica por sí mismo, se da a sí mismo como resultado. Por ejemplo, los únicos dos números reales que son idempotentes son 0 y 1.

En el diseño de la interfaz de usuario, un botón puede llamarse "idempotente" si presionarlo más de una vez tendrá el mismo efecto que presionarlo una vez. Por ejemplo, un botón de "Pausa" no es idempotente si cambia el estado de pausa. Por otro lado, si lo presiona varias veces mantiene el sistema en pausa y presiona "Reproducir", entonces "Pausa" es idempotente. Esto es útil en interfaces como los controles remotos de infrarrojos y las pantallas táctiles donde el usuario puede no estar seguro de haber presionado el botón correctamente y puede presionarlo nuevamente. Los botones de llamada del elevador también son idempotentes, aunque muchas personas piensan que no lo son.

Recurso: - http://www.allapplabs.com/glossary/idempotent.htm