Eu tive muito uso desses trechos, procurando null
valores e cadeias vazias.
Eu uso os modelos de "teste de argumento" como o primeiro código nos meus métodos para verificar os argumentos recebidos.
testNullArgument
if (${varName} == null) {
throw new NullPointerException(
"Illegal argument. The argument cannot be null: ${varName}");
}
Você pode alterar a mensagem de exceção para se ajustar ao padrão da sua empresa ou projeto. No entanto, eu recomendo ter alguma mensagem que inclua o nome do argumento incorreto. Caso contrário, o responsável pela chamada do seu método terá que procurar no código para entender o que deu errado. (A NullPointerException
sem mensagem produz uma exceção com a mensagem bastante absurda "nula").
testNullOrEmptyStringArgument
if (${varName} == null) {
throw new NullPointerException(
"Illegal argument. The argument cannot be null: ${varName}");
}
${varName} = ${varName}.trim();
if (${varName}.isEmpty()) {
throw new IllegalArgumentException(
"Illegal argument. The argument cannot be an empty string: ${varName}");
}
Você também pode reutilizar o modelo de verificação nula acima e implementar esse snippet para verificar apenas cadeias vazias. Você usaria esses dois modelos para produzir o código acima.
O modelo acima, no entanto, tem o problema de que, se o argumento in for final, você precisará alterar um pouco o código produzido (o ${varName} = ${varName}.trim()
erro irá ocorrer).
Se você usa muitos argumentos finais e deseja procurar por seqüências de caracteres vazias, mas não precisa apará-las como parte do seu código, pode optar por isso:
if (${varName} == null) {
throw new NullPointerException(
"Illegal argument. The argument cannot be null: ${varName}");
}
if (${varName}.trim().isEmpty()) {
throw new IllegalArgumentException(
"Illegal argument. The argument cannot be an empty string: ${varName}");
}
testNullFieldState
Também criei alguns trechos para verificar variáveis que não são enviadas como argumentos (a grande diferença é o tipo de exceção, agora sendo um IllegalStateException
).
if (${varName} == null) {
throw new IllegalStateException(
"Illegal state. The variable or class field cannot be null: ${varName}");
}
testNullOrEmptyStringFieldState
if (${varName} == null) {
throw new IllegalStateException(
"Illegal state. The variable or class field cannot be null: ${varName}");
}
${varName} = ${varName}.trim();
if (${varName}.isEmpty()) {
throw new IllegalStateException(
"Illegal state. The variable or class field " +
"cannot be an empty string: ${varName}");
}
testArgument
Este é um modelo geral para testar uma variável. Levei alguns anos para realmente aprender a apreciar este, agora eu o uso muito (em combinação com os modelos acima, é claro!)
if (!(${varName} ${testExpression})) {
throw new IllegalArgumentException(
"Illegal argument. The argument ${varName} (" + ${varName} + ") " +
"did not pass the test: ${varName} ${testExpression}");
}
Você insere um nome de variável ou uma condição que retorna um valor, seguido por um operando ("==", "<", ">" etc) e outro valor ou variável e, se o teste falhar, o código resultante lançará uma IllegalArgumentException.
O motivo da cláusula if ligeiramente complicada, com toda a expressão envolvida em um "! ()", É possibilitar a reutilização da condição de teste na mensagem de exceção.
Talvez isso confunda um colega, mas apenas se ele precisar examinar o código, o que talvez não seja necessário se você lançar esse tipo de exceção ...
Aqui está um exemplo com matrizes:
public void copy(String[] from, String[] to) {
if (!(from.length == to.length)) {
throw new IllegalArgumentException(
"Illegal argument. The argument from.length (" +
from.length + ") " +
"did not pass the test: from.length == to.length");
}
}
Você obtém esse resultado acessando o modelo, digitando "from.length" [TAB] "== to.length".
O resultado é muito mais engraçado que um "ArrayIndexOutOfBoundsException" ou semelhante e pode realmente dar aos usuários a chance de descobrir o problema.
Aproveitar!