Я багато використовував ці фрагменти, шукав null
значення та порожні рядки.
Я використовую шаблони "тест аргументів" як перший код у своїх методах для перевірки отриманих аргументів.
testNullArgument
if (${varName} == null) {
throw new NullPointerException(
"Illegal argument. The argument cannot be null: ${varName}");
}
Ви можете змінити повідомлення про виключення, щоб відповідати стандарту вашої компанії або проекту. Однак я рекомендую мати якесь повідомлення, яке містить ім'я аргументу-порушення. Інакше абоненту вашого методу доведеться шукати код, щоб зрозуміти, що пішло не так. (Повідомлення NullPointerException
без повідомлення створює виняток із досить безглуздим повідомленням "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}");
}
Ви також можете повторно використовувати шаблон перевірки нуля зверху та застосувати цей фрагмент, щоб перевірити лише чи порожні рядки. Потім ви використовуєте ці два шаблони для створення вищевказаного коду.
У наведеному вище шаблоні є проблема, що якщо аргумент остаточний, вам доведеться деякі змінити створений код ( ${varName} = ${varName}.trim()
помилка буде).
Якщо ви використовуєте безліч кінцевих аргументів і хочете перевірити, чи немає порожніх рядків, але не потрібно обрізати їх як частину вашого коду, замість цього ви можете:
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
Я також створив кілька фрагментів для перевірки змінних, які не надсилаються як аргументи (велика різниця - тип винятку, тепер він є 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}");
}
аргумент тесту
Це загальний шаблон для тестування змінної. Мені знадобилося кілька років, щоб справді навчитися цінувати цей, зараз я його багато використовую (у поєднанні з вищевказаними шаблонами, звичайно!)
if (!(${varName} ${testExpression})) {
throw new IllegalArgumentException(
"Illegal argument. The argument ${varName} (" + ${varName} + ") " +
"did not pass the test: ${varName} ${testExpression}");
}
Ви вводите ім'я змінної або умову, яка повертає значення, після чого операнд ("==", "<", ">" тощо) та інше значення або змінну, і якщо тест не вдасться, результат отриманий код кине IllegalArgumentException.
Причиною дещо складного, якщо пункт із усім виразом, загорнутим у "! ()", - це зробити можливим повторне використання тестової умови у повідомленні про виключення.
Можливо, це збентежить колегу, але лише в тому випадку, якщо їм доведеться подивитися на код, який, можливо, не доведеться, якщо ви кинете такі винятки ...
Ось приклад з масивами:
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");
}
}
Цей результат ви отримуєте, викликаючи шаблон, набравши "from.length" [TAB] "== to.length".
Результат набагато смішніший, ніж "ArrayIndexOutOfBoundsException" або подібний, і фактично може дати вашим користувачам можливість розібратися в проблемі.
Насолоджуйтесь!