Java Language Excepciones personalizadas


Ejemplo

En la mayoría de los casos, es más simple desde el punto de vista de diseño de código usar clases de Exception genéricas existentes al lanzar excepciones. Esto es especialmente cierto si solo necesita la excepción para llevar un simple mensaje de error. En ese caso, generalmente se prefiere RuntimeException , ya que no es una excepción marcada. Existen otras clases de excepción para las clases comunes de errores:

Casos en los que usted desee utilizar una clase de excepción personalizada incluyen los siguientes:

  • Está escribiendo una API o biblioteca para que otros la utilicen, y quiere permitir que los usuarios de su API puedan capturar y manejar específicamente las excepciones de su API y poder diferenciar esas excepciones de otras excepciones más genéricas .
  • Está lanzando excepciones para un tipo específico de error en una parte de su programa, que desea detectar y manejar en otra parte de su programa, y ​​desea poder diferenciar estos errores de otros errores más genéricos.

Puede crear sus propias excepciones personalizadas extendiendo RuntimeException para una excepción no verificada, o excepción comprobada extendiendo cualquier Exception que no sea también subclase de RuntimeException , porque:

Las subclases de Excepción que no son también subclases de RuntimeException son excepciones comprobadas

public class StringTooLongException extends RuntimeException {
    // Exceptions can have methods and fields like other classes
    // those can be useful to communicate information to pieces of code catching
    // such an exception
    public final String value;
    public final int maximumLength;

    public StringTooLongException(String value, int maximumLength){
        super(String.format("String exceeds maximum Length of %s: %s", maximumLength, value));
        this.value = value;
        this.maximumLength = maximumLength;
    }
}

Se pueden usar solo como excepciones predefinidas:

void validateString(String value){
    if (value.length() > 30){
        throw new StringTooLongException(value, 30);
    }
}

Y los campos se pueden usar donde se captura y maneja la excepción:

void anotherMethod(String value){
    try {
        validateString(value);
    } catch(StringTooLongException e){
        System.out.println("The string '" + e.value + 
                "' was longer than the max of " + e.maximumLength );
    }
}

Tenga en cuenta que, según la documentación de Java de Oracle :

[...] Si es razonable esperar que un cliente se recupere de una excepción, conviértalo en una excepción comprobada. Si un cliente no puede hacer nada para recuperarse de la excepción, conviértalo en una excepción sin marcar.

Más: