Wann sollte eine IllegalArgumentException ausgelöst werden?

Ich mache mir Sorgen, dass dies eine Laufzeitausnahme ist, daher sollte sie wahrscheinlich sparsam verwendet werden.
Standardanwendungsfall:

void setPercentage(int pct) {
    if( pct < 0 || pct > 100) {
         throw new IllegalArgumentException("bad percent");
     }
}

Das scheint aber folgendes Design zu erzwingen:

public void computeScore() throws MyPackageException {
      try {
          setPercentage(userInputPercent);
      }
      catch(IllegalArgumentException exc){
           throw new MyPackageException(exc);
      }
 }

Damit es wieder zu einer überprüften Ausnahme wird.

Okay, aber lass uns damit weitermachen. Wenn Sie eine falsche Eingabe machen, erhalten Sie einen Laufzeitfehler. 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 - beim Überprüfen0 <= pct && pct <= 100 Es ist zu erwarten, dass der Client-Code statisch funktioniert. Dies gilt nicht für weiter fortgeschrittene Daten wie E-Mail-Adressen oder, schlimmer noch, für Daten, die anhand einer Datenbank überprüft werden müssen. Daher kann der Client-Code im Allgemeinen nicht vorab validiert werden.

Grundsätzlich sage ich also, dass ich keine aussagekräftige konsistente Richtlinie für die Verwendung von seheIllegalArgumentException. Es scheint, dass es nicht verwendet werden sollte und wir sollten uns an unsere eigenen geprüften Ausnahmen halten. Was ist ein guter Anwendungsfall, um dies zu werfen?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage