Javaのリストをチェックしよう|nullチェックと空判定の正しい方法

2025年5月8日

Javaでリスト(List)を扱う際、nullチェックや空判定を正しく行わないとNullPointerExceptionが発生するリスクがあります。この記事では、現場で頻繁に使われる実践的なチェック方法をコード例とともに解説します。

基本的なnullチェックと空判定

// 安全なリストチェックの基本形
if (list != null && !list.isEmpty()) {
    // リストがnullでなく、かつ要素がある場合の処理
}

よくある間違い||(OR)を使うと、nullの場合はlist.isEmpty()で例外が発生します。必ず&&(AND)を使用しましょう。

さまざまなシナリオ別チェック方法

1. 絶対にnullにしたくない場合

// メソッドがリストを返す場合のベストプラクティス
public List<String> getItems() {
    return items != null ? items : Collections.emptyList();
}

2. Stream APIを利用する(Java 8以降)

Optional.ofNullable(list)
    .filter(l -> !l.isEmpty())
    .ifPresent(l -> {
        // 要素がある場合の処理
    });

3. Apache Commons Collectionsを利用

import org.apache.commons.collections4.CollectionUtils;

if (CollectionUtils.isNotEmpty(list)) {
    // 安全な処理
}

チェックのベストプラクティス

  • nullチェックは常に最初にlist != nullを最初に評価
  • size()よりisEmpty()list.isEmpty()の方が可読性が高い
  • 不変リストを返すCollections.emptyList()で空リストを返す
  • 防衛的コピーnew ArrayList(list)で予期せぬ変更を防ぐ

よくあるエラーと解決策

現象 原因 解決策
NullPointerException nullチェック漏れ list != nullを追加
ConcurrentModificationException イテレート中にリスト変更 Iterator使用またはコピー作成
IndexOutOfBoundsException 空リストへのアクセス !list.isEmpty()チェック追加

まとめ

Javaでリストを安全に扱うには、以下の3点を徹底しましょう。

  1. nullチェックを最初に行う
  2. 空リストかどうかを判定する
  3. 可能な限りnullではなく空リストを返す

これらの対策を講じることで、予期せぬ例外を防ぎ、堅牢なコードを書くことができます。チーム開発ではコーディング規約を確認し、統一した方法を採用しましょう。

技術

Posted by xxoruioxx