Ich mache mir Sorgen, dass dies eine Laufzeitausnahme ist, daher sollte es wahrscheinlich sparsam verwendet werden.
Standard-Anwendungsfall:
void setPercentage(int pct) {
if( pct < 0 || pct > 100) {
throw new IllegalArgumentException("bad percent");
}
}
Aber das scheint das folgende Design zu erzwingen:
public void computeScore() throws MyPackageException {
try {
setPercentage(userInputPercent);
}
catch(IllegalArgumentException exc){
throw new MyPackageException(exc);
}
}
Damit es wieder zu einer geprüften Ausnahme wird.
Okay, aber lass uns damit anfangen. Wenn Sie eine schlechte Eingabe machen, wird ein Laufzeitfehler angezeigt. Erstens ist es also ziemlich schwierig, diese Richtlinie einheitlich umzusetzen, da Sie möglicherweise genau das Gegenteil tun müssen:
public void scanEmail(String emailStr, InputStream mime) {
try {
EmailAddress parsedAddress = EmailUtil.parse(emailStr);
}
catch(ParseException exc){
throw new IllegalArgumentException("bad email", exc);
}
}
Und noch schlimmer: Während 0 <= pct && pct <= 100
erwartet werden kann, dass die Überprüfung des Client-Codes statisch erfolgt, gilt dies nicht für erweiterte Daten wie eine E-Mail-Adresse oder noch schlimmer für etwas, das mit einer Datenbank verglichen werden muss. Daher kann der Client-Code im Allgemeinen nicht vorab überprüft werden bestätigen.
Grundsätzlich sage ich also, dass ich keine aussagekräftige konsistente Richtlinie für die Verwendung von sehe IllegalArgumentException
. Es scheint, dass es nicht verwendet werden sollte und wir uns an unsere eigenen geprüften Ausnahmen halten sollten. Was ist ein guter Anwendungsfall, um dies zu werfen?