Objects.nonNull()とは何か
Javaで業務システムやWebアプリケーションを開発していると、「nullかどうかを確認する処理」が頻繁に登場します。
その中でもJava 8で追加された便利なユーティリティメソッドが
Objects.nonNull()
です。
このメソッドは名前の通り、 「nullではないこと」を判定するためのメソッドです。
Objects.nonNull(対象オブジェクト)Java戻り値は非常にシンプルです。
- nullの場合 → false
- nullではない場合 → true
業務開発ではオブジェクトの存在確認、データ取得結果のチェック、Stream APIによるデータ加工などで頻繁に利用されます。
まずはnullについて理解しよう
Objects.nonNull()を理解するためには、まずnullの意味を理解する必要があります。
Javaにおけるnullとは、 「参照先のオブジェクトが存在しない状態」 を意味します。
String name = null;Javaこの状態では、nameはStringオブジェクトを指していません。
つまり、 「何も存在しない状態」 です。
この状態でメソッドを呼び出すと、Javaで最も有名な例外であるNullPointerExceptionが発生します。
String name = null;
System.out.println(name.length());Java実行結果
NullPointerException
そのため、業務システムではオブジェクト利用前に存在確認を行うことが非常に重要になります。
Objects.nonNull()の基本構文
最もシンプルな使い方を見てみましょう。
import java.util.Objects;
String name = "MONO";
if (Objects.nonNull(name)) {
System.out.println("nameは存在します");
}Java実行結果
nameは存在します
nameには値が入っているため、Objects.nonNull()はtrueを返します。
ステップバイステップで理解する
ステップ1:変数を作成する
String userName = "Taro";JavauserNameには文字列オブジェクトが格納されています。
ステップ2:Objects.nonNull()で判定する
boolean result =
Objects.nonNull(userName);Javaステップ3:結果を確認する
System.out.println(result);Java実行結果
true
オブジェクトが存在するためtrueになります。
nullの場合はどうなるのか
String userName = null;
System.out.println(
Objects.nonNull(userName));Java実行結果
false
nullなのでfalseが返ります。
Objects.nonNull()と != null の違い
初心者の方が最初に疑問に思うのが、この点です。
従来のJavaでは次のような書き方が一般的でした。
if (user != null) {
System.out.println(user.getName());
}JavaObjects.nonNull()を使うと次のようになります。
if (Objects.nonNull(user)) {
System.out.println(user.getName());
}Java意味はほぼ同じです。
実際にObjects.nonNull()の内部実装も非常にシンプルです。
public static boolean nonNull(Object obj) {
return obj != null;
}Javaそのため性能差はほぼありません。
主な違いはコードの読みやすさとStream APIとの相性です。
業務システムでよくある利用例
データベース検索結果の確認
User user =
userRepository.findById(100);
if (Objects.nonNull(user)) {
System.out.println(user.getName());
}Java検索結果が存在する場合のみ処理を実行できます。
業務システムでは非常に頻繁に登場するパターンです。
APIレスポンスの確認
Customer customer =
customerApi.getCustomer();
if (Objects.nonNull(customer)) {
process(customer);
}Java外部システムとの連携では、戻り値がnullになる可能性を常に考慮する必要があります。
ログ出力前の確認
if (Objects.nonNull(user)) {
log.info(user.getName());
}Javaログ出力時の例外発生を防止できます。
Objects.nonNull()が真価を発揮する場面
Stream APIとの組み合わせ
実はObjects.nonNull()が最も活躍するのはStream APIです。
例えばリストの中にnullが混在しているケースです。
List<String> names =
Arrays.asList(
"Tanaka",
null,
"Suzuki",
null,
"Sato"
);
names.stream()
.filter(Objects::nonNull)
.forEach(System.out::println);Java実行結果
Tanaka
Suzuki
Sato
nullだけを簡単に除外できます。
なぜ実務でよく使われるのか
業務データには欠損値が含まれることが珍しくありません。
例えば次のようなケースがあります。
- 未登録のメールアドレス
- 空の顧客情報
- 削除済みデータ
- 外部システムの取得失敗
そのためStream処理でnullを除外するコードは非常に頻繁に登場します。
Objects.isNull()との違い
両者はペアで覚えると便利です。
Objects.isNull(user)Java意味
user == nullJavanullならtrueです。
Objects.nonNull(user)Java意味
user != nullJavanullでなければtrueです。
実務ではnonNull()の方が利用頻度が高い傾向があります。
理由は、 「存在するデータだけを処理したい」 ケースが圧倒的に多いためです。
実務で使えるテンプレート集
取得結果チェック
if (Objects.nonNull(employee)) {
process(employee);
}Javaログ出力
if (Objects.nonNull(order)) {
log.info(order.getId());
}JavaStreamによるnull除外
List<User> users =
userList.stream()
.filter(Objects::nonNull)
.toList();JavaOptional作成前チェック
if (Objects.nonNull(user)) {
Optional<User> optional =
Optional.of(user);
}Java初心者が間違えやすいポイント
nullでなければ中身が有効とは限らない
よくある誤解です。
String name = "";Javaこれは空文字ですがnullではありません。
Objects.nonNull(name)Java結果はtrueです。
つまり、 「nullではない」 と 「値が正しい」 は別問題です。
空文字チェックは別途必要
if (name != null &&
!name.isEmpty()) {
System.out.println("有効な値");
}Java実務ではnullチェックと入力チェックを組み合わせることが重要です。
チェック後の処理が重要
次のコードは不十分です。
if (Objects.nonNull(user)) {
System.out.println("存在します");
}Java存在確認しただけで終わっています。
実際にはその後の処理を安全に実行することが目的です。
if (Objects.nonNull(user)) {
System.out.println(user.getName());
}Javaこのように利用します。
情報セキュリティの観点から見る重要性
nullチェックは単なるバグ対策ではありません。
業務システムでは例外発生によって以下の問題が起きる可能性があります。
- サービス停止
- 処理中断によるデータ不整合
- エラーログの大量出力
- システム可用性の低下
- 障害調査コストの増大
セキュアコーディングでは、 「受け取ったデータを信用せず検証する」 という考え方が重要です。
Objects.nonNull()は、その基本となる入力値検証や取得結果検証で活躍する重要なユーティリティメソッドです。
まとめ
Objects.nonNull()はJava標準ライブラリが提供する非null判定メソッドです。
- nullではない場合にtrueを返す
- 内部的には != null と同じ意味
- NullPointerException防止に役立つ
- Stream APIとの相性が非常に良い
- filter(Objects::nonNull)は実務で頻出する
- Objects.isNull()とセットで覚えると便利
- セキュアコーディングの基礎として重要
特に実務では、データ取得後やStream処理において
Objects.nonNull()
を見かける機会が非常に多くあります。
単なるnullチェックとして覚えるだけでなく、「安全なシステムを構築するための防御策」という視点で理解すると、より実践的なJavaプログラミングができるようになります。
