Estou preocupado que esta seja uma exceção de tempo de execução, portanto, provavelmente deve ser usada com moderação.
Caso de uso padrão:
void setPercentage(int pct) {
if( pct < 0 || pct > 100) {
throw new IllegalArgumentException("bad percent");
}
}
Mas parece que isso forçaria o seguinte design:
public void computeScore() throws MyPackageException {
try {
setPercentage(userInputPercent);
}
catch(IllegalArgumentException exc){
throw new MyPackageException(exc);
}
}
Para voltar a ser uma exceção verificada.
Ok, mas vamos com isso. Se você fornecer informações incorretas, receberá um erro de tempo de execução. Em primeiro lugar, essa é uma política bastante difícil de implementar uniformemente, porque você pode ter que fazer a conversão exatamente o oposto:
public void scanEmail(String emailStr, InputStream mime) {
try {
EmailAddress parsedAddress = EmailUtil.parse(emailStr);
}
catch(ParseException exc){
throw new IllegalArgumentException("bad email", exc);
}
}
E pior - embora se 0 <= pct && pct <= 100
possa esperar que a verificação do código do cliente seja feita estaticamente, isso não é verdade para dados mais avançados, como um endereço de e-mail, ou pior, algo que precisa ser verificado em um banco de dados, portanto, em geral, o código do cliente não pode validar.
Basicamente, o que estou dizendo é que não vejo uma política consistente significativa para o uso de IllegalArgumentException
. Parece que não deve ser usado e devemos nos ater às nossas próprias exceções verificadas. Qual é um bom caso de uso para lançar isso?