Automatizada IllegalArgumentException mensagem?
-
29-09-2020 - |
Pergunta
Eu sempre verificar os argumentos de funções públicas e lançar exceções quando algo está errado.(Para auxiliares de eu usar afirmações).
Como esta:
if( a < 0 || a >= b )
throw new IllegalArgumentException("'a' must be greater or equal to 0 and
smaller than b ");
Mas sempre irrita-me a escrever estas mensagens de erro.A mensagem parece redundante para mim, como a mensagem é apenas a negação da instrução
a < 0 || a >= b
.
É também muitas vezes acontece que eu mude o nome da variável com a refatoração (em eclipse) e, em seguida, a mensagem não refletir as alterações.Ou eu alterar as condições e se esqueça de alterar as mensagens.
Seria ótimo, se eu pudesse escrever algo como:
assertArgument(a >= 0 && a < b);
Isso deve aumentar um IllegalArgumentException com uma mensagem como
"violated argument assertion: a >= 0 && a < b."
Em C você pode gravar uma macro (na verdade, em C declaração é apenas uma macro).Existe uma maneira simples para fazer algo parecido com isso em java?
Obrigado!
Solução
Na linguagem C que você não pode usar macros para fazer isso, mas no cpp (o pré-processador C) você pode :-) Se você realmente quer fazer isso não há nada que restringe a execução de cpp em sua origem java antes que ele seja compilado.Que iria deixá-lo usar cpp estilo de macros (você pode precisar para remover as linhas começando com #line
a partir da cp de saída.)
Para reproduzir o condicional na exceção é IMHO, incluindo demasiado detalhe de implementação.Se a sua mensagem de exceção descreve a violação de contrato, nos termos do contrato (por exemplo, "nenhum pai de objeto de dado", "quantidade não pode ser negativo") você não precisa mudar cada vez que a condição de alterações.