J'essaie de définir ma propre classe d'exceptions de la manière la plus simple, et voici ce que j'obtiens:
public class MyException extends Exception {}
public class Foo {
public bar() throws MyException {
throw new MyException("try again please");
}
}
Voici ce que dit le compilateur Java:
cannot find symbol: constructor MyException(java.lang.String)
J'avais le sentiment qu'il fallait hériter de ce constructeur java.lang.Exception
, n'est-ce pas?
java
exception
inheritance
yegor256
la source
la source
if your class has no constructor, you get the default even if the superclass does not have it
La dernière partie est impossible, sauf si la superclasse a un constructeur par défaut accessible à cette classe (peut être protégé ou protégé par package). Sinon, vous devez explicitement appeler l'un des constructeurs parents, sinon la compilation échouera.MyException(Throwable)
etMyException(String, Throwable)
pour prendre correctement en charge le chaînage des exceptions .Une exception personnalisée typique que je définirais est quelque chose comme ceci:
Je crée même un modèle à l'aide d'Eclipse, je n'ai donc pas à réécrire toutes ces choses encore et encore.
la source
Si vous utilisez la nouvelle boîte de dialogue de classe dans Eclipse, vous pouvez simplement définir le champ Superclasse sur
java.lang.Exception
et cocher "Constructeurs de la superclasse" et cela générera les éléments suivants:En réponse à la question ci-dessous à propos de ne pas appeler
super()
le constructeur defualt, Oracle a ceci à dire :la source
super()
?La raison de ceci est expliquée dans l' article Héritage de la plate-forme Java qui dit:
la source
la source
La classe d'exception a deux constructeurs
public Exception()
- Ceci construit une exception sans aucune information supplémentaire. La nature de l'exception est généralement déduite du nom de la classe.public Exception(String s)
- Construit une exception avec un message d'erreur spécifié. Un message détaillé est une chaîne qui décrit la condition d'erreur pour cette exception particulière.la source
public Exception(Throwable)
etpublic Exception(String, Throwable)
. Ils sont nécessaires pour prendre correctement en charge le chaînage d'exceptions .Si vous héritez d'Exception, vous devez fournir un constructeur qui prend une chaîne en paramètre (il contiendra le message d'erreur).
la source
et n'oubliez pas la façon la plus simple de lever une exception (vous n'avez pas besoin de créer une classe)
la source