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!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top