Я переживаю, що це є винятком під час виконання, тому його, мабуть, слід використовувати ощадливо.
Стандартний випадок використання:
void setPercentage(int pct) {
if( pct < 0 || pct > 100) {
throw new IllegalArgumentException("bad percent");
}
}
Але це здається, що це призведе до наступного дизайну:
public void computeScore() throws MyPackageException {
try {
setPercentage(userInputPercent);
}
catch(IllegalArgumentException exc){
throw new MyPackageException(exc);
}
}
Щоб повернути його до перевіреного винятку.
Гаразд, але давайте підемо з цим. Якщо ви даєте погані дані, ви отримуєте помилку виконання. Отже, по-перше, це насправді досить складно реалізувати політику рівномірно, тому що ви могли б зробити зворотне перетворення:
public void scanEmail(String emailStr, InputStream mime) {
try {
EmailAddress parsedAddress = EmailUtil.parse(emailStr);
}
catch(ParseException exc){
throw new IllegalArgumentException("bad email", exc);
}
}
І ще гірше - під час перевірки 0 <= pct && pct <= 100
клієнтського коду можна очікувати, що це робити статично, це не так для більш вдосконалених даних, таких як адреса електронної пошти, або ще гірше, те, що потрібно перевірити в базі даних, тому загальний код клієнта не може попередньо, підтвердити.
Так що я кажу, що я не бачу змістовної послідовної політики щодо використання IllegalArgumentException
. Здається, його не слід використовувати, і ми повинні дотримуватися власних перевірених винятків. Який корисний випадок для цього?