Ich habe diese Snippets häufig verwendet und nach null
Werten und leeren Zeichenfolgen gesucht .
Ich verwende die "Argumenttest" -Vorlagen als ersten Code in meinen Methoden, um empfangene Argumente zu überprüfen.
testNullArgument
if (${varName} == null) {
throw new NullPointerException(
"Illegal argument. The argument cannot be null: ${varName}");
}
Möglicherweise möchten Sie die Ausnahmemeldung an den Standard Ihres Unternehmens oder Projekts anpassen. Ich empfehle jedoch eine Nachricht, die den Namen des betreffenden Arguments enthält. Andernfalls muss der Aufrufer Ihrer Methode im Code nachsehen, um zu verstehen, was schief gelaufen ist. (Eine NullPointerException
Nachricht ohne Nachricht erzeugt eine Ausnahme mit der ziemlich unsinnigen Nachricht "null").
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}");
}
Sie können die Nullprüfungsvorlage auch von oben wiederverwenden und dieses Snippet implementieren, um nur nach leeren Zeichenfolgen zu suchen. Sie würden dann diese beiden Vorlagen verwenden, um den obigen Code zu erzeugen.
Die obige Vorlage hat jedoch das Problem, dass Sie, wenn das in-Argument endgültig ist, den erzeugten Code etwas ändern müssen (das ${varName} = ${varName}.trim()
wird fehlschlagen).
Wenn Sie viele endgültige Argumente verwenden und nach leeren Zeichenfolgen suchen möchten, diese aber nicht als Teil Ihres Codes kürzen müssen, können Sie stattdessen Folgendes tun:
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
Ich habe auch einige Snippets zum Überprüfen von Variablen erstellt, die nicht als Argumente gesendet werden (der große Unterschied ist der Ausnahmetyp, der jetzt ein ist 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
Dies ist eine allgemeine Vorlage zum Testen einer Variablen. Ich habe ein paar Jahre gebraucht, um wirklich zu lernen, dieses zu schätzen, jetzt benutze ich es oft (natürlich in Kombination mit den oben genannten Vorlagen!)
if (!(${varName} ${testExpression})) {
throw new IllegalArgumentException(
"Illegal argument. The argument ${varName} (" + ${varName} + ") " +
"did not pass the test: ${varName} ${testExpression}");
}
Sie geben einen Variablennamen oder eine Bedingung ein, die einen Wert zurückgibt, gefolgt von einem Operanden ("==", "<", ">" usw.) und einem anderen Wert oder einer anderen Variablen. Wenn der Test fehlschlägt, löst der resultierende Code eine IllegalArgumentException aus.
Der Grund für die etwas komplizierte if-Klausel mit dem gesamten Ausdruck in einem "! ()" Ist, dass die Testbedingung in der Ausnahmemeldung wiederverwendet werden kann.
Vielleicht verwirrt es einen Kollegen, aber nur, wenn er sich den Code ansehen muss, was er möglicherweise nicht tun muss, wenn Sie solche Ausnahmen auslösen ...
Hier ist ein Beispiel mit Arrays:
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");
}
}
Sie erhalten dieses Ergebnis, indem Sie die Vorlage aufrufen und "from.length" [TAB] "== to.length" eingeben.
Das Ergebnis ist viel lustiger als eine "ArrayIndexOutOfBoundsException" oder ähnliches und gibt Ihren Benutzern möglicherweise die Möglichkeit, das Problem herauszufinden.
Genießen!