初めに
こちらの記事では主にピュアJavaで書いたサンプルソースでも載せようかなと思います。
基本的には、初心者に教えるときや、ローカルテストなどで使うために少し書いたものが多いですが、参考程度に
Listのチェック時の注意
まずは、Listのnullチェック時の挙動テストです。
設計もせず、またコメントが1つもないのですが、やってることとしては
* Listで渡されたものがisEmpty()、null、equals(null)、size()でチェックした時の戻り値がどうなるかという話です。
* コンソールに吐かれるのが、その結果です。
* もちろん、インスタンスができてないListを渡してしまうとオブジェクトでないのでisEmpty()から落ちます。ですが、エラーを握りつぶしてログ吐かせます。
サンプルソース
CheckList.java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* {@link List}のnullチェックサンプル<br>
*
*/
public final class CheckList {
public static final String CONSOLE_LOG = "[%s: %s] \r\n";
public static void list(final List<String> strs) {
System.out.print(isEmpty(strs) == null ? "" : String.format(CONSOLE_LOG, "isEmpty", isEmpty(strs)));
System.out.print(nullptr(strs) == null ? "" : String.format(CONSOLE_LOG, "nullptr", nullptr(strs)));
System.out.print(equals(strs) == null ? "" : String.format(CONSOLE_LOG, "equals", equals(strs)));
System.out.print(size(strs) == null ? "" : String.format(CONSOLE_LOG, "size", size(strs)));
}
static Boolean isEmpty(final List<String> strs) {
try {
return strs.isEmpty();
} catch (Exception e) {
System.out.print(String.format(CONSOLE_LOG, "isEmpty", e));
}
return null;
}
static Boolean nullptr(final List<String> strs) {
return strs == null;
}
static Boolean equals(final List<String> strs) {
try {
return strs.equals(null);
} catch (Exception e) {
System.out.print(String.format(CONSOLE_LOG, "equals", e));
}
return null;
}
static Integer size(final List<String> strs) {
try {
return strs.size();
} catch (Exception e) {
System.out.print(String.format(CONSOLE_LOG, "size", e));
}
return null;
}
}
Input
それでは、このソースに以下の3つのオブジェクトを渡します。
imput.java
final List<String> newNulls = new ArrayList<String>();
final List<String> nulls = null;
final List<String> newNotNulls = Arrays.asList("test");
Output
Inputに対する上から順に見ていくと
* インスタンスを作ったオブジェクトに対してはnullptrが発生せずに安全に判定をすることができています。
* nullを入れたまま渡すと、nullptrが発生してしまいます。
output.txt
#リストでnew ArrayList<String>()
[isEmpty: true]
[nullptr: false]
[equals: false]
[size: 0]
#リストでnull
[isEmpty: java.lang.NullPointerException]
[nullptr: true]
[equals: java.lang.NullPointerException]
[size: java.lang.NullPointerException]
#リストでArrays.asList("test")
[isEmpty: false]
[nullptr: false]
[equals: false]
[size: 1]
チェックする時
nullで渡さないこと。newするタイミングなどを気をつける。
nullチェック後→isEmpty()で判定するなどのnullptrに気をつける必要があります。