Quando deve ser lançada uma IllegalArgumentException?
Estou preocupado que esta seja uma exceção de tempo de execução, por isso provavelmente deve ser usado com moderação.
Caso de uso padrão:
void setPercentage(int pct) {
if( pct < 0 || pct > 100) {
throw new IllegalArgumentException("bad percent");
}
}
Mas isso parece forçar 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ê der entrada ruim, você receberá um erro de execução. Então, em primeiro lugar, isso é realmente uma política bastante difícil de implementar uniformemente, porque você poderia ter que fazer a conversão exatamente oposta:
public void scanEmail(String emailStr, InputStream mime) {
try {
EmailAddress parsedAddress = EmailUtil.parse(emailStr);
}
catch(ParseException exc){
throw new IllegalArgumentException("bad email", exc);
}
}
E pior - enquanto verifica0 <= pct && pct <= 100
Pode-se esperar que o código do cliente faça estaticamente, isso não é para dados mais avançados, como um endereço de e-mail, ou pior, algo que deve ser verificado em um banco de dados, portanto, código de cliente geral não pode pré-validar.
Então, basicamente, o que estou dizendo é que não vejo uma política coerente significativa para o uso deIllegalArgumentException
. Parece que não deve ser usado e devemos nos ater às nossas próprias exceções verificadas. O que é um bom caso de uso para jogar isso?