ホームページ  >  記事  >  Java  >  項目 オプション返却時の注意

項目 オプション返却時の注意

DDD
DDDオリジナル
2024-09-19 06:19:02518ブラウズ

Item  Seja criterioso ao retornar opcionais

Java 8 以前のアプローチ:

  • スロー例外: 例外的な状況のために予約されており、スタック トレース キャプチャのためコストがかかります。
  • null を返す: null を返す可能性に対処する特別なコードが必要です。これにより、NullPointerException などのエラーが発生する可能性があります。

Java 8 のアプローチ:

  • 値を含むことも空にすることもできる不変のコンテナである Optional クラスの紹介。
  • null の使用を回避し、例外をスローせずに欠損値の処理を簡素化します。
  • メソッドは、値が存在しないことを表すために Optional を返すことができます。

オプションを使用する利点:

  • null に関する例外と問題を回避します。
  • 値が欠落している場合にクライアントが何をするかを決定できるようにします (デフォルト値を提供する、例外をスローするなど)。
  • 明示的な null 処理を必要とせずにコードを簡単にします。

Optional クラスの便利なメソッド:

  • Optional.of(value): null 以外の値で Optional を作成します。
  • Optional.ofNullable(value): Optional を作成しますが、null 値を受け入れます。
  • orElse(value): Optional が空の場合、デフォルト値を返します。
  • orElseThrow(): 値が存在しない場合は例外をスローします。
  • map()、 flatMap()、filter(): Optional 内の値の操作を許可します。

オプション:

にコレクションを含めないでください。
  • リストや配列などのコンテナ タイプの場合、Optional の代わりに空のコレクションを返します。

パフォーマンスに関する考慮事項:

  • Optional の使用には、オブジェクト割り当ての点でコストがかかります。
  • プリミティブ型の場合は、パッケージ化のコストを避けるために、OptionalInt、OptionalLong、および OptionalDouble を使用します。

オプションの他の使用法には注意してください:
これらをマップのキーや値として、またはコレクション内で使用することは避けてください。
オプションのゲッターなど、意味がない限り、インスタンス フィールドとして使用することは避けてください。

コード例
例 1: Optional
の基本的な使用法

import java.util.Optional;

public class ExemploOptional {
    public static Optional<String> encontrarNome(String[] nomes, String nomeBuscado) {
        for (String nome : nomes) {
            if (nome.equalsIgnoreCase(nomeBuscado)) {
                return Optional.of(nome);
            }
        }
        return Optional.empty();  // Retorna Optional vazio se não encontrar o nome
    }

    public static void main(String[] args) {
        String[] nomes = {"João", "Maria", "Ana"};
        Optional<String> nomeEncontrado = encontrarNome(nomes, "Maria");

        nomeEncontrado.ifPresent(nome -> System.out.println("Nome encontrado: " + nome));
        System.out.println(nomeEncontrado.orElse("Nome não encontrado"));
    }
}

例 2: orElseThrow の使用

import java.util.Optional;

public class ExemploOrElseThrow {
    public static Optional<Integer> buscarIdade(String nome) {
        if (nome.equals("João")) {
            return Optional.of(30);
        }
        return Optional.empty();  // Retorna Optional vazio se o nome não for "João"
    }

    public static void main(String[] args) {
        Optional<Integer> idade = buscarIdade("Maria");

        // Lança uma exceção se o valor não estiver presente
        int valorIdade = idade.orElseThrow(() -> new IllegalArgumentException("Idade não encontrada!"));
        System.out.println("Idade: " + valorIdade);
    }
}

例 3: プリミティブ型のオプション

import java.util.OptionalInt;

public class ExemploOptionalInt {
    public static OptionalInt buscarIdade(String nome) {
        if (nome.equals("João")) {
            return OptionalInt.of(30);
        }
        return OptionalInt.empty();  // Retorna OptionalInt vazio se o nome não for "João"
    }

    public static void main(String[] args) {
        OptionalInt idade = buscarIdade("João");

        if (idade.isPresent()) {
            System.out.println("Idade encontrada: " + idade.getAsInt());
        } else {
            System.out.println("Idade não encontrada");
        }
    }
}

以上が項目 オプション返却時の注意の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:単一の数字 I次の記事:単一の数字 I