Java Tips | 基本ユーティリティ:Objects.nonNull()

Web APP Java
スポンサーリンク
スポンサーリンク

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";
Java

userNameには文字列オブジェクトが格納されています。

ステップ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());
}
Java

Objects.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 == null
Java

nullならtrueです。

Objects.nonNull(user)
Java

意味

user != null
Java

nullでなければtrueです。

実務ではnonNull()の方が利用頻度が高い傾向があります。

理由は、 「存在するデータだけを処理したい」 ケースが圧倒的に多いためです。

実務で使えるテンプレート集

取得結果チェック

if (Objects.nonNull(employee)) {
    process(employee);
}
Java

ログ出力

if (Objects.nonNull(order)) {
    log.info(order.getId());
}
Java

Streamによるnull除外

List<User> users =
        userList.stream()
                .filter(Objects::nonNull)
                .toList();
Java

Optional作成前チェック

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プログラミングができるようになります。

タイトルとURLをコピーしました