【Java】Optionalの使い方とNullPointerException対策

Java

はじめに

Java開発に携わっていると、避けて通れないのが NullPointerException(NPE) です。
「値がnullのままメソッドを呼んでしまった…」「if文でnullチェックばかり書いてコードが読みにくい…」といった経験は、どんなエンジニアが一度は通る道です。
今回は、Optionalの基本構文からNullPointerException対策について記載していきたいと思います。

他にも、体系的にJavaを学びたい方には以下の教材がおすすめです:

👉スッキリわかるJava入門 
👉スッキリわかるJava入門 実践編

 

NullPointerExceptionとは?

NullPointerException(NPE)とは、Nullのオブジェクトに対して処理を実行しようとして実行ができずにExceptionで落ちる事象です。

 

発生例

text がnullのままメソッドを呼び出すとNPEが発生します。
このようにExceptionを発生させないためには「値が存在するかどうか」を常に意識してコードを書く必要があります。

String text = null;
System.out.println(text.length()); // NullPointerException

 

NullPointerException(NPE)の問題点

  • 冗長なコード:毎回if文で null をチェックする必要がある
  • バグの発生:チェック漏れで実行時エラーが発生
  • 運用リスク:本番環境でNPEが起きるとシステム障害に直結

 

Optionalとは?

Optional は「値があるかもしれないし、ないかもしれない」という状態を表すクラスです。
Java 8で導入されたクラスで、nullの可能性がある値を安全に扱うためのクラスとなります。

 

基本構文

Optional<型> value = Optional.ofNullable(値);
// 値があれば表示
value.ifPresent(System.out::println); 

 

Optionalの生成方法

Optional.of

値が必ず存在するとわかっている場合に使用します。
値がnullだった場合、必ず NullPointerException が投げられます。

import java.util.Optional;

~~~~略~~~~

Optional<String> opt = Optional.of("Java");

 

Optional.ofNullable

値が存在するか不明な場合はこちらを使用します。

Optional<String> opt = Optional.ofNullable(null); // 空のOptional生成

 

Optional.empty

空の宣言時に使用します。

Optional<String> opt = Optional.empty();

 

Optionalの活用方法

ifPresent(値がある場合のみ処理)

「ifPresent」は値が存在する場合のみ処理を行います。

Optional<String> opt = Optional.of("Java");
opt.ifPresent(v -> System.out.println("値: " + v));

 

orElse(値がない場合にデフォルト値)

値が存在しない場合に、「orElse」で指定したデフォルトの値を返します。

Object name = Optional.ofNullable(null).orElse("デフォルト");
System.out.println(name); // デフォルト

 

orElseThrow(値がなければ例外)

値が存在しない場合に、例外を投げる仕組みも作成できます。

String result = Optional.ofNullable(null)
    .orElseThrow(() -> new IllegalArgumentException("値が必要です"));

 

まとめ

OptionalはJavaにおける NullPointerException対策の有効なツール です。

メソッド内容
ofnull以外しか格納できない
orElseデフォルト値を設定
ifPresent値の存在チェックが可能
orElseThrow例外を投げる

 

最後に

Javaの環境構築は、この記事を参照してみてください。
【開発環境構築】VS CodeでJavaを使用するための環境構築を実施する – SEもりのLog (selifemorizo.com)

以上、ログになります。
これからも継続していきましょう!!

Javaサーバーサイド関連
シェアする
おすすめIT本
良いコード/悪いコードで学ぶ設計入門

「ITエンジニア本大賞2023」技術書部門で大賞を受賞した本です。
・コードの可読性
・普段意識したほうが良いこと
・リファクタリング考え方
等、普段のコードを設計する際に意識することが書かれています。
コードのあるべき姿に迷ったら一度読んでみると良い本です。

仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん

Dockerって何?となったときに私が最初に読んだ本です。
Dockerがどんな仕組みで動いているのか、コマンドでは何を命令しているのかを理解できるように、イラストを多用して説明しています。

1冊ですべて身につくJavaScript入門講座

「ITエンジニア本大賞2024」技術書部門で大賞を受賞した本です。
私が次に読もうと思っている本なのでおすすめとして挙げておきたいと思います。

コメント

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