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ć?