Java Language Eccezioni personalizzate


Esempio

Nella maggior parte dei casi, è più semplice da un punto di vista della progettazione del codice utilizzare le classi di Exception generiche esistenti quando si generano eccezioni. Questo è particolarmente vero se hai solo bisogno dell'eccezione per portare un semplice messaggio di errore. In tal caso, RuntimeException di solito è preferito, poiché non è un'eccezione controllata. Esistono altre classi di eccezioni per classi comuni di errori:

I casi in cui si vuole utilizzare una classe eccezione personalizzata sono i seguenti:

  • Stai scrivendo un'API o una libreria per l'utilizzo da parte di altri e desideri consentire agli utenti della tua API di essere in grado di catturare e gestire in modo specifico le eccezioni dalla tua API e di distinguere tali eccezioni da altre eccezioni più generiche .
  • Stai lanciando eccezioni per un tipo specifico di errore in una parte del tuo programma, che vuoi catturare e gestire in un'altra parte del tuo programma, e vuoi essere in grado di distinguere questi errori da altri errori più generici.

È possibile creare eccezioni personalizzate estendendo RuntimeException per un'eccezione non controllata o verificata l'eccezione estendendo qualsiasi Exception che non sia anche sottoclasse di RuntimeException , in quanto:

Le sottoclassi di Eccezione che non sono anche sottoclassi di RuntimeException sono eccezioni controllate

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;
    }
}

Quelli possono essere usati solo come eccezioni predefinite:

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

E i campi possono essere utilizzati dove viene rilevata e gestita l'eccezione:

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 );
    }
}

Tieni presente che, secondo la documentazione Java di Oracle :

[...] Se ci si può ragionevolmente aspettare che un client recuperi da un'eccezione, rendi un'eccezione controllata. Se un client non può eseguire operazioni di ripristino dall'eccezione, renderlo un'eccezione non controllata.

Di Più: