Wiele razy korzystałem z tych fragmentów null
wartości i pustych ciągów.
Używam „testu argumentów” - szablonów jako pierwszego kodu w moich metodach do sprawdzania otrzymanych argumentów.
testNullArgument
if (${varName} == null) {
throw new NullPointerException(
"Illegal argument. The argument cannot be null: ${varName}");
}
Możesz zmienić komunikat wyjątku, aby pasował do standardu firmy lub projektu. Polecam jednak komunikat zawierający nazwę niepoprawnego argumentu. W przeciwnym razie program wywołujący twoją metodę będzie musiał zajrzeć do kodu, aby zrozumieć, co poszło nie tak. (ZANullPointerException
bez komunikatu powoduje wyjątek z dość bezsensownym komunikatem „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}");
}
Możesz również ponownie użyć powyższego szablonu sprawdzania wartości zerowej i zaimplementować ten fragment kodu, aby sprawdzać tylko puste ciągi. Następnie użyjesz tych dwóch szablonów do wygenerowania powyższego kodu.
Powyższy szablon ma jednak problem polegający na tym, że jeśli argument in jest ostateczny, będziesz musiał poprawić wygenerowany kod ( ${varName} = ${varName}.trim()
nie powiedzie się).
Jeśli używasz wielu końcowych argumentów i chcesz sprawdzić puste ciągi, ale nie musisz przycinać ich jako części kodu, możesz zamiast tego zrobić to:
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
Stworzyłem również fragmenty do sprawdzania zmiennych, które nie są wysyłane jako argumenty (duża różnica to typ wyjątku, który teraz jest IllegalStateException
zamiast niego).
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
Jest to ogólny szablon do testowania zmiennej. Kilka lat zajęło mi naprawdę nauczenie się doceniać ten, teraz go używam (oczywiście w połączeniu z powyższymi szablonami!)
if (!(${varName} ${testExpression})) {
throw new IllegalArgumentException(
"Illegal argument. The argument ${varName} (" + ${varName} + ") " +
"did not pass the test: ${varName} ${testExpression}");
}
Wpisujesz nazwę zmiennej lub warunek, który zwraca wartość, następnie operand („==”, „<”, „>” itd.) I inną wartość lub zmienną, a jeśli test się nie powiedzie, wynikowy kod zgłosi wyjątek IllegalArgumentException.
Przyczyną nieco skomplikowanej klauzuli if, z całym wyrażeniem zawartym w „! ()”, Jest umożliwienie ponownego użycia warunku testowego w komunikacie wyjątku.
Być może wprowadzi to w błąd kolegę, ale tylko wtedy, gdy będzie musiał spojrzeć na kod, czego nie będą musieli, jeśli wprowadzicie tego rodzaju wyjątki ...
Oto przykład z tablicami:
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");
}
}
Otrzymujesz ten wynik, wywołując szablon, wpisując „from.length” [TAB] „== to.length”.
Rezultat jest o wiele zabawniejszy niż „ArrayIndexOutOfBoundsException” lub podobny i może faktycznie dać użytkownikom szansę rozwiązania problemu.
Cieszyć się!