Sono preoccupato che questa sia un'eccezione di runtime, quindi probabilmente dovrebbe essere usata con parsimonia.
Caso d'uso standard:
void setPercentage(int pct) {
if( pct < 0 || pct > 100) {
throw new IllegalArgumentException("bad percent");
}
}
Ma sembra che forzerebbe il seguente design:
public void computeScore() throws MyPackageException {
try {
setPercentage(userInputPercent);
}
catch(IllegalArgumentException exc){
throw new MyPackageException(exc);
}
}
Per riportarlo ad essere un'eccezione controllata.
Va bene, ma andiamo con quello. Se dai un input errato, ottieni un errore di runtime. Quindi, in primo luogo, questa è in realtà una politica abbastanza difficile da implementare in modo uniforme, perché potresti dover eseguire la conversione esattamente opposta:
public void scanEmail(String emailStr, InputStream mime) {
try {
EmailAddress parsedAddress = EmailUtil.parse(emailStr);
}
catch(ParseException exc){
throw new IllegalArgumentException("bad email", exc);
}
}
E peggio ancora: mentre 0 <= pct && pct <= 100
ci si può aspettare che il controllo del codice client avvenga in modo statico, non è così per dati più avanzati come un indirizzo e-mail o, peggio, qualcosa che deve essere controllato in un database, quindi in generale il codice client non può pre- convalidare.
Quindi sostanzialmente quello che sto dicendo è che non vedo una politica coerente e significativa per l'uso di IllegalArgumentException
. Sembra che non dovrebbe essere utilizzato e dovremmo attenerci alle nostre eccezioni controllate. Qual è un buon caso d'uso per lanciarlo?