1. はじめに
今まで、null判定・undefined判定などの値があるかどうかを判定するロジックに悩むことが多かったので、今回はメモ書きとしてまとめていたものを公開していきます。(今回はJava編です)
2. Javaにおける値存在判定
①Objects.isNull()
nullの場合にtrueを返します。
!= nullよりも可読性が高い、streamAPIのfilterなどでも使えるというメリットがあります。
String hoge = null;
// 結果:nullです
if (Objects.isNull(hoge)) {
System.out.print("nullです。");
}
②String.isEmpty()
要素の文字数が0の時にtrueを返します。
但し、その要素がnullの場合はNullPointerException(通称ぬるポ)になり、エラーとなってしまいます。
String hoge = null;
String hogehoge = "";
// 結果:NullPointerException
if (hoge .isEmpty()) {
System.out.print("nullです。");
}
// 結果:文字数がありません。
if (hogehoge .isEmpty()) {
System.out.print("文字数がありません。");
}
③(Apache版)StringUtils.isEmpty()
nullと""(空文字)の時にtrueを返します。
但しスペースのみの場合はfalseになります。
※StringUtilsクラスはSpring版もありますが、Spring版のStringUtils.isEmpty()は非推奨になっています。
String hoge = null;
String hogehoge = "";
String hogehogehoge = " ";
// 結果:nullです。
if (StringUtils.isEmpty(hoge )) {
System.out.print("nullです。");
}
// 結果:空文字です。
if (StringUtils.isEmpty(hogehoge)) {
System.out.print("空文字です。");
}
// 結果:何も出力しない
if (StringUtils.isEmpty(hogehogehoge )) {
System.out.print("半角スペースです。");
}
④(Apache版)StringUtils.isBlank()
Apache版のみ存在するメソッドです。
nullと""(空文字)だけでなく、スペースの時にもtrueを返します。
String hoge = null;
String hogehoge = "";
String hogehogehoge = " ";
// 結果:nullです。
if (StringUtils.isBlank(hoge )) {
System.out.print("nullです。");
}
// 結果:空文字です。
if (StringUtils.isBlank(hogehoge)) {
System.out.print("空文字です。");
}
// 結果:半角スペースです。
if (StringUtils.isBlank(hogehogehoge )) {
System.out.print("半角スペースです。");
}
⑤(Apache版)CollectionUtils.isEmpty()
Listがそもそもない場合(null)、Listの中身がない場合(空)両方に対しても値があるかどうかを判定してくれます。
List<String> hogeList= new ArrayList<String>();
// 結果:空の配列です。
if (CollectionUtils.isEmpty(hogeList)) {
System.out.print("空の配列です。");
}
// 下記と同じ意味のコードです。
if (hogeList== null || hogeList.size() == 0) {
System.out.print("空の配列です。");
}
⑥(Apache版・Spring版)MapUtils.isEmpty()
Mapがそもそもない場合(null)、Mapの中身がない場合(空)両方に対しても値があるかどうかを判定してくれます。
Map<String, Object> hoge = new HashMap<>();
// 結果:空のMapです。
if (MapUtils.isEmpty(hoge)) {
System.out.print("空のMapです。");
}
// 下記と同じ意味のコードです。
if (hoge == null || hoge.isEmpty()) {
System.out.print("空のMapです。");
}
引数 | 引数(コード) | Objects.isNull() | String.isEmpty() | StringUtils.isEmpty() | StringUtils.isBlank() | CollectionUtils.isEmpty() | MapUtils.isEmpty() |
---|---|---|---|---|---|---|---|
null | null | true | エラー | true | true | true | true |
空文字 | '' | true | true | true | true | - | - |
半角スペース | ' ' | true | false | false | true | - | - |
空配列 | [] | - | - | - | - | true | - |
空のMap | {} | - | - | - | - | - | true |
3.さいごに
今回の記事は以上です。
SpringBootにおけるアノテーションで、nullチェックなどを行う場合のメソッドについても書いていきます。
4.参考資料
①Stringのnull、空文字チェックにはStringUtilsのメソッドを使おう!
②【Java】どうしてString.isEmpty()ではなくStringUtils.isEmpty()を使うのか
③Java 推奨されるnullチェックについて
④MapのnullチェックにはMapUtils.isEmpty()を使おう!