Java Language Exceptions personnalisées


Exemple

Dans la plupart des cas, il est plus simple du point de vue de la conception de code d'utiliser des classes d' Exception génériques existantes lors du lancement d'exceptions. Cela est particulièrement vrai si vous avez uniquement besoin de l'exception pour transmettre un message d'erreur simple. Dans ce cas, RuntimeException est généralement préférable car il ne s'agit pas d'une exception vérifiée. D'autres classes d'exception existent pour les classes d'erreurs courantes:

Les cas où vous ne souhaitez utiliser une classe d'exception personnalisée sont les suivantes:

  • Vous écrivez une API ou une bibliothèque à utiliser par d'autres utilisateurs et vous souhaitez autoriser les utilisateurs de votre API à intercepter et gérer spécifiquement les exceptions de votre API et à les différencier des autres exceptions plus génériques .
  • Vous lancez des exceptions pour un type d'erreur spécifique dans une partie de votre programme, que vous souhaitez intercepter et gérer dans une autre partie de votre programme, et que vous souhaitez pouvoir différencier ces erreurs des autres erreurs plus génériques.

Vous pouvez créer vos propres exceptions personnalisées en étendant RuntimeException pour une exception non contrôlée ou en vérifiant l'exception en étendant toute Exception qui n'est pas également la sous-classe de RuntimeException , car:

Les sous-classes d'exception qui ne sont pas également des sous-classes de RuntimeException sont des exceptions vérifiées

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

Ceux-ci peuvent être utilisés comme exceptions prédéfinies:

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

Et les champs peuvent être utilisés lorsque l'exception est interceptée et gérée:

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

Gardez à l'esprit que, selon la documentation Java d' Oracle :

[...] Si l'on peut raisonnablement s'attendre à ce qu'un client récupère d'une exception, faites-en une exception cochée. Si un client ne peut rien faire pour récupérer à partir de l'exception, faites-en une exception non contrôlée.

Plus: