¿Qué es un AssertionError? ¿En qué caso debería tirarlo desde mi propio código?

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í.

Como entiendo, este error es lanzado por el marco cuando falla una statement de afirmación. Además, en el javadoc se acaba de escribir.

[Se genera un error de aserción] para indicar que una aserción ha fallado.

Pero no veo ninguna afirmación (statement de verdadero / falso) siendo violada aquí. Por supuesto, se ha violado la statement “No debe crear una instancia de un elemento de esta clase”, pero si esta es la lógica detrás de eso, todos deberíamos lanzar AssertionError s en todas partes, y obviamente eso no es lo que sucede.

FWIW, acababa de lanzar un

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

¿Hay algo malo con eso? ¿En qué caso debo lanzar un AssertionError de 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 statement “No debe crear una instancia de un elemento de esta clase”, pero si esta es la lógica detrás de eso, todos deberíamos lanzar AssertionErrors todas partes, y obviamente eso no es lo que sucede.

El código no dice que el usuario no deba llamar al constructor de cero argumentos. La afirmación está ahí para decir que, por lo que sabe el progtwigdor, él / ella ha hecho imposible llamar al constructor cero argumentos (en este caso, haciéndolo private y no llamándolo desde el código del Example ). Y así, si se produce una llamada, se ha violado esa afirmación, por lo que AssertionError es apropiado.

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

De modo que si alguna vez se lanza un error de AssertionError , es un signo claro de un error de progtwigción.

Se emitirá un error de afirmación cuando diga “Ha escrito un código que no debería ejecutarse a toda costa porque, según su lógica, no debería ocurrir. PERO si sucede, arroje el error de aserción. Y no lo detecte”. En tal caso, se produce 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 se incluye en java.lang.Error y los errores no se deben capturar.

AssertionError es una excepción no verificada que aumenta explícitamente por el progtwigdor o por el desarrollador de API para indicar que la statement de afirmación falla.

 assert(x>10); 

Salida:

 AssertionError 

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

    Intereting Posts