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?

More than 1 year has passed since last update.

ChatGPT(GPT-4)に聞いてみた。

Java 8から導入された Optional クラスは、値がnullの可能性をあらわす型であり、nullチェックを明示的に行うことなくnull安全なコードを記述することを可能にします。これにより、nullに関連するランタイムエラー(NullPointerException など)を避けることができます。

以下に、Optional の基本的な使用方法を示します。

import java.util.Optional;

public class OptionalExample {
    public static void main(String[] args) {
        String str = null;

        // Optionalを使ってnullをラップする
        Optional<String> optional = Optional.ofNullable(str);

        // ラップした値がnullかどうかを判断する
        if (optional.isPresent()) {
            System.out.println(optional.get());
        } else {
            System.out.println("値が存在しません");
        }

        // ラップした値がnullの場合にデフォルト値を返す
        System.out.println(optional.orElse("デフォルト値"));

        // ラップした値がnullの場合に例外をスローする
        try {
            System.out.println(optional.orElseThrow(NullPointerException::new));
        } catch (NullPointerException e) {
            System.out.println("例外がスローされました");
        }
    }
}

メリット:

  • Nullポインターエクセプションを防ぐことができます。これにより、ランタイムエラーを減らすことができます。
  • Nullチェックが明示的に行われるため、コードが読みやすくなります。そのため、コードのメンテナンス性が向上します。

注意点:

  • Optionalをフィールド、配列の要素、またはコレクションの要素として使用するのは推奨されていません。その理由は、Optionalが設計された目的は、メソッドの戻り値としてnullを明示的に表現することであり、フィールドや配列、コレクションの要素に使用するとその意図が曖昧になるからです。
  • Optionalのgetメソッドは、ラップしている値がnullでないことを保証しないため、呼び出す前にisPresentメソッドでチェックを行うべきです。さもなければ、NoSuchElementExceptionがスローされる可能性があります。
  • Optional は可能な限り関数型のアプローチを使用するべきです。つまり、isPresentget の組み合わせよりも、 map, filter, flatMap, orElse, orElseGet, orElseThrow などのメソッドを使う方がより望ましいです。
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?