이 스 니펫을 많이 사용하여 null
값과 빈 문자열을 찾았습니다 .
"인수 테스트"-템플릿을 메소드의 첫 번째 코드로 사용하여 수신 된 인수를 확인합니다.
testNull 인수
if (${varName} == null) {
throw new NullPointerException(
"Illegal argument. The argument cannot be null: ${varName}");
}
회사 또는 프로젝트 표준에 맞게 예외 메시지를 변경할 수 있습니다. 그러나 문제가되는 인수의 이름이 포함 된 메시지를 사용하는 것이 좋습니다. 그렇지 않으면 메소드의 호출자가 코드에서 잘못된 점을 이해해야합니다. ( NullPointerException
메시지가없는 A 는 의미가없는 메시지 "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}");
}
위에서 null 확인 템플릿을 재사용하고이 스 니펫을 구현하여 빈 문자열 만 확인하면됩니다. 그런 다음이 두 템플릿을 사용하여 위 코드를 생성합니다.
그러나 위의 템플릿은 in 인수가 final 인 경우 생성 된 코드를 수정해야한다는 문제가 있습니다 ( ${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 절의 이유는 예외 메시지에서 테스트 조건을 재사용 할 수 있도록하기위한 것입니다.
어쩌면 동료를 혼란스럽게 할 것입니다. 그러나 코드를 봐야만하는 경우에만 이러한 종류의 예외를 throw하면 필요하지 않을 수도 있습니다 ...
다음은 배열을 사용한 예입니다.
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"또는 이와 유사한 방법보다 더 재미 있으며 실제로 사용자에게 문제를 파악할 수있는 기회를 제공 할 수 있습니다.
즐겨!