Je crains qu'il s'agisse d'une exception d'exécution et qu'il faille donc l'utiliser avec parcimonie.
Cas d'utilisation standard :
void setPercentage(int pct) {
if( pct < 0 || pct > 100) {
throw new IllegalArgumentException("bad percent");
}
}
Mais cela semble forcer la conception suivante :
public void computeScore() throws MyPackageException {
try {
setPercentage(userInputPercent);
}
catch(IllegalArgumentException exc){
throw new MyPackageException(exc);
}
}
Pour qu'il redevienne une exception vérifiée.
Ok, mais allons-y avec ça. Si vous donnez une mauvaise entrée, vous obtenez une erreur d'exécution. Tout d'abord, il s'agit d'une politique assez difficile à mettre en œuvre de manière uniforme, car vous pourriez avoir à faire la conversion inverse :
public void scanEmail(String emailStr, InputStream mime) {
try {
EmailAddress parsedAddress = EmailUtil.parse(emailStr);
}
catch(ParseException exc){
throw new IllegalArgumentException("bad email", exc);
}
}
Et pire, en vérifiant 0 <= pct && pct <= 100
Ce n'est pas le cas pour des données plus avancées, telles qu'une adresse électronique, ou pire, quelque chose qui doit être vérifié par rapport à une base de données, donc en général le code client ne peut pas effectuer de pré-validation.
Donc, en gros, ce que je dis c'est que je ne vois pas de politique cohérente et significative pour l'utilisation de IllegalArgumentException
. Il semble qu'elle ne devrait pas être utilisée et que nous devrions nous en tenir à nos propres exceptions vérifiées. Quel est le bon cas d'utilisation pour lancer cette exception ?