He usado mucho estos fragmentos, buscando null
valores y cadenas vacías.
Utilizo las plantillas de "prueba de argumento" como primer código en mis métodos para verificar los argumentos recibidos.
testNullArgument
if (${varName} == null) {
throw new NullPointerException(
"Illegal argument. The argument cannot be null: ${varName}");
}
Es posible que desee cambiar el mensaje de excepción para que se ajuste al estándar de su empresa o proyecto. Sin embargo, recomiendo tener algún mensaje que incluya el nombre del argumento ofensivo. De lo contrario, la persona que llama de su método tendrá que buscar en el código para entender qué salió mal. (A NullPointerException
sin mensaje produce una excepción con el mensaje "sin valor" bastante absurdo).
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}");
}
También puede reutilizar la plantilla de comprobación nula desde arriba e implementar este fragmento para verificar solo las cadenas vacías. Luego usaría esas dos plantillas para producir el código anterior.
Sin embargo, la plantilla anterior tiene el problema de que si el argumento in es definitivo, tendrá que modificar el código producido (el ${varName} = ${varName}.trim()
error fallará).
Si usa muchos argumentos finales y desea verificar las cadenas vacías pero no tiene que recortarlos como parte de su código, puede ir con esto en su lugar:
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
También creé algunos fragmentos para verificar variables que no se envían como argumentos (la gran diferencia es el tipo de excepción, ahora es un IllegalStateException
lugar).
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}");
}
pruebaArgumento
Esta es una plantilla general para probar una variable. Me tomó algunos años aprender realmente a apreciar este, ahora lo uso mucho (¡en combinación con las plantillas anteriores, por supuesto!)
if (!(${varName} ${testExpression})) {
throw new IllegalArgumentException(
"Illegal argument. The argument ${varName} (" + ${varName} + ") " +
"did not pass the test: ${varName} ${testExpression}");
}
Ingrese un nombre de variable o una condición que devuelva un valor, seguido de un operando ("==", "<", ">" etc.) y otro valor o variable y si la prueba falla, el código resultante arrojará una IllegalArgumentException.
La razón de la cláusula if un poco complicada, con toda la expresión envuelta en un "! ()" Es para que sea posible reutilizar la condición de prueba en el mensaje de excepción.
Tal vez confundirá a un colega, pero solo si tiene que mirar el código, lo que podría no tener que hacer si arroja este tipo de excepciones ...
Aquí hay un ejemplo con matrices:
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");
}
}
Obtiene este resultado llamando la plantilla, escribiendo "from.length" [TAB] "== to.length".
El resultado es mucho más divertido que una "ArrayIndexOutOfBoundsException" o similar y puede darles a los usuarios la oportunidad de resolver el problema.
¡Disfrutar!