0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Java】Optionalを理解する

0
Last updated at Posted at 2026-06-28

1. Optionalとは

Optional(java.util.Optional<T>)とは、Java 8で導入された「値が空(null)」である可能性を表現するためのコンテナオブジェクトです。
イメージとしては、値を直接扱うのではなく、「中身が空かもしれないし、何か入っているかもしれない箱」に包んで扱う仕組みです。


2. nullを直接返す場合との違い

最大の意図は、「呼び出し側に値が空である可能性を明示し、安全な処理を強制すること」にあります。

  • nullを直接返す場合: 呼び出し側がnullチェックを忘れると、容易にヌルポ(NullPointerException)が発生します。
  • Optionalを返す場合: 開発者はnullが返る可能性に気付ける。また、値の取り出しにはOptionalが提供するメソッドを経由する必要があるため、安全な実装が担保される。

3. Optionalの生成方法

  • Optional.of() 引数にnullを渡すとNPEが発生するため、引数の値が確実にnullではない場合に使う。
  • Optional.ofNullable() 引数がnullの場合は、自動的に空のOptionalが返るため、値がnullである可能性がある場合に使用。
  • Optional.empty() 明示的に空のOptionalオブジェクトを生成する際に使う。

4. 値の有無を確認する

  • isPresent() 値が存在する場合に true、空なら false を返す。
  • isEmpty() 空の場合に true、値が存在すれば false を返します。

※Java 11から、直感的に書けるように isEmpty() が追加された。


5. ifPresent(値が存在する場合だけ処理する)

ifPresent(Consumer) は、値が存在する場合のみ、引数に渡したラムダ式を処理する。

// 従来
if (user != null) {
    System.out.println(user.getName());
}

// Optional (ifPresent)
userOpt.ifPresent(user -> System.out.println(user.getName()));

まとめ

Optionalの利点をまとめます。

  • 呼び出し側への明示:戻り値をOptionalにする事で、「この値は空(null)かもしれない」という事を呼び出し側の実装者に明示できる。
  • Null例外の防止:呼び出し側が空の場合の処理を正しく実装する事で、NullPointerExceptionの発生を抑止しやすくなる。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?