これらのスニペットを何度も使用して、null
値と空の文字列を探しました。
受け取った引数をチェックするためのメソッドの最初のコードとして、「引数テスト」テンプレートを使用します。
testNullArgument
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チェックテンプレートを再利用して、このスニペットを実装し、空の文字列のみをチェックすることもできます。次に、これらの2つのテンプレートを使用して上記のコードを生成します。
ただし、上記のテンプレートには、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句の理由は、例外メッセージでテスト条件を再利用できるようにするためです。
おそらくそれは同僚を混乱させるでしょうが、彼らがコードを見る必要がある場合に限り、あなたがこれらの種類の例外をスローする場合には必要ないかもしれません...
配列の例を次に示します。
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」または類似のものよりもかなりおかしく、実際にユーザーに問題を理解する機会を与える可能性があります。
楽しい!