sirve significa que para ejemplos caracteristicas assertionerror java exception effective-java

java - significa - ¿Qué es un AssertionError? ¿En qué caso debería lanzarlo desde mi propio código?



joptionpane java pdf (4)

En el ítem 2 del libro "Effective Java, 2nd edition", hay un fragmento de código en el que el autor quiere prohibir la inicialización vacía de un objeto.

class Example { private Example() { throw new AssertionError(); } }

El tipo de excepción arrojada, es lo que me confunde aquí.

No entiendo si el AssertionError produce solo por la ausencia de errores más adecuados o porque debería ser así.

Según tengo entendido, este error es arrojado por el marco cuando falla una afirmación. Además, en el Javadoc está escrito

[Se emite un AssertionError] para indicar que una aserción ha fallado.

Pero no veo ninguna aseveración (declaración de verdadero y falso) que se viole aquí. Por supuesto, se ha violado la declaración "No debes instanciar un elemento de esta clase", pero si esta es la lógica detrás de eso, entonces todos deberíamos lanzar AssertionError todas partes, y obviamente eso no es lo que sucede.

FWIW, acababa de arrojar un

new IllegalStateException("Must not instantiate an element of this class")

¿Hay algo mal con eso? ¿En ese caso debería lanzar un AssertionError en mi propio código?

Lo siento si es solo una duda sutil, pero utilizo mucho este patrón en mi código y quiero asegurarme de estar haciendo lo correcto.


Por supuesto, se ha violado la declaración "No debes instanciar un elemento de esta clase", pero si esta es la lógica detrás de eso, entonces todos deberíamos lanzar AssertionErrors todas partes, y eso obviamente no es lo que sucede.

El código no dice que el usuario no deba llamar al constructor zero-args. La afirmación está allí para decir que, por lo que sabe el programador, ha imposibilitado llamar al constructor zero-args (en este caso haciéndolo private y no llamándolo desde el código del Example ). Entonces, si ocurre una llamada, esa afirmación ha sido violada, por lo que AssertionError es apropiado.


El significado de un AssertionError es que sucedió algo que el desarrollador pensó que era imposible que sucediera.

Entonces, si alguna vez se arroja un AssertionError , es una clara señal de un error de programación.


Se lanza un error de aserción cuando dices "Has escrito un código que no debe ejecutarse a toda costa porque según tu lógica no debería suceder. PERO si sucede, entonces lanza AssertionError. Y no lo captas". En tal caso, lanza un error de aserción.

new IllegalStateException("Must not instantiate an element of this class")'' // Is an Exception not error.

Nota: El error de aserción viene bajo java.lang.Error Y los errores no están destinados a ser capturados.


AssertionError es una excepción no comprobada que se levanta explícitamente por el programador o por el desarrollador de la API para indicar que falla la afirmación.

assert(x>10);

Salida:

AssertionError

Si x no es mayor que 10, obtendrás la excepción de tiempo de ejecución que dice AssertionError.