Kiedy należy zgłosić wyjątek IllegalArgumentException?

Obawiam się, że jest to wyjątek czasu wykonywania, więc prawdopodobnie powinien być używany oszczędnie.
Standardowy przypadek użycia:

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

Ale wydaje się, że wymusiłoby to następujący projekt:

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

Aby przywrócić go do sprawdzonego wyjątku.

Dobra, ale chodźmy z tym. Jeśli otrzymasz złe dane wejściowe, pojawi się błąd wykonania. Tak więc po pierwsze, jest to dość trudna polityka do wdrożenia jednolicie, ponieważ można by wykonać bardzo odwrotną konwersję:

public void scanEmail(String emailStr, InputStream mime) {
    try {
        EmailAddress parsedAddress = EmailUtil.parse(emailStr);
    }
    catch(ParseException exc){
        throw new IllegalArgumentException("bad email", exc);
    }
}

A co gorsza - podczas sprawdzania0 <= pct && pct <= 100 można oczekiwać, że kod klienta będzie statyczny, nie jest tak w przypadku bardziej zaawansowanych danych, takich jak adres e-mail lub, co gorsza, coś, co należy sprawdzić w bazie danych, dlatego ogólnie kod klienta nie może wstępnie zweryfikować.

Tak więc zasadniczo mówię, że nie widzę znaczącej spójnej polityki dotyczącej korzystania zIllegalArgumentException. Wygląda na to, że nie powinien być używany i powinniśmy trzymać się własnych sprawdzonych wyjątków. Jaki jest dobry przypadek, aby to rzucić?

questionAnswers(6)

yourAnswerToTheQuestion