15
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Java 推奨されるnullチェックについて

Last updated at Posted at 2022-09-17

本日も実務の実装の中で、学んだことがあったので備忘録として書き残しておこうと思います。

人知れず変数の中に入ってしまうnullの対処についてです。
Java歴の浅い方や古いバージョン(8以前)を中心に実装していた方もためになるかと思います。

僕の知っていたnullチェック

僕が研修などで学んだチェックは一般的な以下でした。

String a = null;
String b = "あいう";

if (a != null) {
  System.out.print(a);
} else {
  System.out.print(b); //こっちが実行される
}

!= または == これで比較してif文の分岐でヌルポで落ちないようにすることしか知りませんでした。
今でもシステム内では結構使われていましたが、、、

推奨されるnullチェック

nullの考慮ができるメソッドやOptionalを利用することで、nullチェックの数は減るとは思いますが、
どうしてもnullチェックをしたい時があります。
そんな時にjava8以降で推奨されるnullチェックは以下です。

String a = null;
String b = "あいう";

if (Objects.nonNull(a)) {
  System.out.print(a);
} else {
  System.out.print(b); //こっちが実行される
}

ObjectsクラスのnonNullメソッドは、!=nullと同じ役割を果たします。

== nullの判定と同じメソッドも用意されています。
それが下記で、ObjectsクラスのisNull()メソッドです。

String a = null;
String b = "あいう";

if (Objects.isNull(a)) {
  System.out.print(b);//こっちが実行される
} else {
  System.out.print(a); 
}


Objectsクラスのメソッドを利用するメリット

メリット①:!=や==と記述するより可読性が上がる。

メリット②:関数型プログラミングで利用しやすい、見やすい


メリット②についてですが、streamAPIにて中間操作でnullのデータを破棄したい時に利用できます。

クラス名::メソッド名 もしくは、インスタンス名::メソッド名で利用できます。

List list = Arrays.asList(1,null,2,null);
List<Integer> result = list.stream().filter(Objects::nonNull).collect(Collectors.toList());
//resultの中身は[1,2]のみになる

可読性が上がるかつ簡潔に記載ができるのが良いですよね。

nullチェックをする時はObjectクラスを利用してくように心がけます。

15
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?