Jeter exception vs retourner une valeur null avec l'instruction switch
Donc, j'ai une fonction qui formate une date afin de le contraindre à des enum DateType{ACTUELLE, DÉBUT, FIN}
quel serait le meilleur moyen de la manipulation de la valeur de retour avec des cas qui utilisent l'instruction switch
public static String format(Date date, DateType datetype) {
..validation checks
switch(datetype){
case CURRENT:{
return getFormattedDate(date, "yyyy-MM-dd hh:mm:ss");
}
...
default:throw new ("Something strange happend");
}
}
OU de jeter excpetion à la fin
public static String format(Date date, DateType datetype) {
..validation checks
switch(datetype){
case CURRENT:{
return getFormattedDate(date, "yyyy-MM-dd hh:mm:ss");
}
...
}
//It will never reach here, just to make compiler happy
throw new IllegalArgumentException("Something strange happend");
}
OU de retourner la valeur null
public static String format(Date date, DateType datetype) {
..validation checks
switch(datetype){
case CURRENT:{
return getFormattedDate(date, "yyyy-MM-dd hh:mm:ss");
}
...
}
return null;
}
Quelle serait la meilleure pratique ici ? Aussi toutes les valeurs enum seront traitées dans l'instruction de cas
Si vous avez une condition qui ne doit jamais arriver, je voudrais utiliser une AssertionError.
Grâce AssertionError fait beaucoup plus de sens que IllegalArgumentException
Grâce AssertionError fait beaucoup plus de sens que IllegalArgumentException
OriginalL'auteur Greg | 2010-04-02
Vous devez vous connecter pour publier un commentaire.
Lancer une exception, puisque c'est un cas exceptionnel.
Et de le jeter en dehors de la
switch
, il serait plus lisible. Sinon on dirait "le cas par défaut est exceptionnel".OriginalL'auteur Bozho
Je pense que
throw new IllegalArgumentException("Something strange happend")
est la meilleure pratique.À l'aide de
null
sera juste presumibly provoquer unNullPointerException
quelque part lorsque vous utilisez la valeur de retour, mais il sera moins informatif que de lever une exception spécifique qui décrit le problème!Et vous le savez: effacer les erreurs = meilleur développement.
OriginalL'auteur Jack
Je voudrais aller avec la première approche (mais avec
IllegalArgumentException
que dans votre deuxième approche). Vous devez inclure une instruction par défaut afin de se prémunir contre les cas quand quelqu'un modifys (s'étend) votre enum. En mettant l'exception de défaut de déclaration ne fait clair pour le lecteur que le code n'est jamais censé passer l'interrupteur de la déclaration. Autrement, ils auraient pour vérifier si vraiment toutes les valeurs enum sont dans le commutateur.OriginalL'auteur Björn Pollex
Exceptions, comme vous pouvez obéir plus pour les parents que pour un seul retour de type int peut. En général, vous utilisez des Exceptions, là où elles existent (C++), et les valeurs de retour où pas (C).
OriginalL'auteur drahnr