Javaのリストをチェックしよう|nullチェックと空判定の正しい方法
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点を徹底しましょう。
- nullチェックを最初に行う
- 空リストかどうかを判定する
- 可能な限りnullではなく空リストを返す
これらの対策を講じることで、予期せぬ例外を防ぎ、堅牢なコードを書くことができます。チーム開発ではコーディング規約を確認し、統一した方法を採用しましょう。
ディスカッション
コメント一覧
まだ、コメントがありません