Me preocupa que se trate de una excepción de tiempo de ejecución, por lo que probablemente debería usarse con moderación.
Caso de uso estándar:
void setPercentage(int pct) {
if( pct < 0 || pct > 100) {
throw new IllegalArgumentException("bad percent");
}
}
Pero eso parece que forzaría el siguiente diseño:
public void computeScore() throws MyPackageException {
try {
setPercentage(userInputPercent);
}
catch(IllegalArgumentException exc){
throw new MyPackageException(exc);
}
}
Para que vuelva a ser una excepción marcada.
Está bien, pero vayamos con eso. Si da una entrada incorrecta, obtendrá un error de tiempo de ejecución. Entonces, en primer lugar, esa es en realidad una política bastante difícil de implementar de manera uniforme, porque podría tener que hacer la conversión totalmente opuesta:
public void scanEmail(String emailStr, InputStream mime) {
try {
EmailAddress parsedAddress = EmailUtil.parse(emailStr);
}
catch(ParseException exc){
throw new IllegalArgumentException("bad email", exc);
}
}
Y lo que es peor: si bien 0 <= pct && pct <= 100
se puede esperar que la verificación del código del cliente se haga de forma estática, esto no es así para datos más avanzados, como una dirección de correo electrónico, o peor aún, algo que debe verificarse con una base de datos, por lo tanto, en general, el código del cliente no puede validar.
Básicamente, lo que estoy diciendo es que no veo una política coherente significativa para el uso de IllegalArgumentException
. Parece que no debería usarse y deberíamos ceñirnos a nuestras propias excepciones marcadas. ¿Cuál es un buen caso de uso para lanzar esto?