Я много использовал эти фрагменты, искал null
значения и пустые строки.
Я использую шаблоны аргументов в качестве первого кода в моих методах для проверки полученных аргументов.
testNullArgument
if (${varName} == null) {
throw new NullPointerException(
"Illegal argument. The argument cannot be null: ${varName}");
}
Вы можете изменить сообщение об исключении в соответствии со стандартом вашей компании или проекта. Тем не менее, я рекомендую иметь какое-то сообщение, содержащее имя оскорбительного аргумента. В противном случае вызывающая сторона вашего метода должна будет заглянуть в код, чтобы понять, что пошло не так. (A 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}");
}
Вы также можете повторно использовать шаблон проверки нуля сверху и реализовать этот фрагмент, чтобы проверять только пустые строки. Затем вы использовали бы эти два шаблона для создания кода выше.
Однако в приведенном выше шаблоне есть проблема, заключающаяся в том, что если аргумент in является окончательным, вам придется внести некоторые изменения в полученный код ( ${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}");
}
testArgument
Это общий шаблон для проверки переменной. Мне потребовалось несколько лет, чтобы по-настоящему научиться ценить этот, сейчас я часто его использую (в сочетании с вышеупомянутыми шаблонами, конечно!)
if (!(${varName} ${testExpression})) {
throw new IllegalArgumentException(
"Illegal argument. The argument ${varName} (" + ${varName} + ") " +
"did not pass the test: ${varName} ${testExpression}");
}
Вы вводите имя переменной или условие, которое возвращает значение, за которым следует операнд ("==", "<", ">" и т. Д.) И другое значение или переменную, и в случае сбоя теста результирующий код генерирует исключение IllegalArgumentException.
Причина слегка усложненного предложения if со всем выражением, заключенным в «! ()», Состоит в том, чтобы сделать возможным повторное использование условия теста в сообщении об исключении.
Возможно, это будет сбивать с толку коллег, но только если им придется смотреть на код, который им может и не понадобиться, если вы выбросите подобные исключения ...
Вот пример с массивами:
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 или подобное, и может фактически дать вашим пользователям шанс выяснить проблему.
Наслаждайтесь!