Ich bin besorgt, dass dies eine Laufzeitausnahme ist, so dass es wahrscheinlich sparsam verwendet werden sollte.
Standard-Anwendungsfall:Wann sollte eine IllegalArgumentException ausgelöst werden?
void setPercentage(int pct) {
if(pct < 0 || pct > 100) {
throw new IllegalArgumentException("bad percent");
}
}
Aber das scheint, wie es die folgende Konstruktion zwingen würde:
espublic void computeScore() throws MyPackageException {
try {
setPercentage(userInputPercent);
}
catch(IllegalArgumentException exc){
throw new MyPackageException(exc);
}
}
Um wieder eine geprüfte Ausnahme zu sein.
Okay, aber lass uns damit gehen. Wenn Sie eine schlechte Eingabe geben, erhalten Sie einen Laufzeitfehler. Also erstens, das ist eigentlich eine ziemlich schwierige Politik einheitlich zu implementieren, da Sie das Gegenteil Umwandlung zu tun haben könnten:
public void scanEmail(String emailStr, InputStream mime) {
try {
EmailAddress parsedAddress = EmailUtil.parse(emailStr);
}
catch(ParseException exc){
throw new IllegalArgumentException("bad email", exc);
}
}
Und schlimmer noch - während 0 <= pct && pct <= 100
der Client-Code Überprüfung zu erwarten ist statisch zu tun, ist dies nicht so Für komplexere Daten wie eine E-Mail-Adresse oder noch schlimmer, etwas, das mit einer Datenbank verglichen werden muss. Daher kann der Client-Code im Allgemeinen nicht vorab validiert werden.
Also im Grunde, was ich sage ist, sehe ich keine sinnvolle konsistente Politik für die Verwendung von IllegalArgumentException
. Es scheint, dass es nicht verwendet werden sollte und wir sollten bei unseren eigenen geprüften Ausnahmen bleiben. Was ist ein guter Anwendungsfall, um dies zu werfen?
Ich denke, der Ratschlag "wo die Erwartung ist, dass ein schlechtes Argument ein Programmiererfehler ist" ist am besten mit dem überein, wie ich das verwendet habe, also akzeptiere diese Antwort. – djechlin