Item 55製品の返却はご遠慮ください

16039 ワード


  • Java 8の前:メソッドがいくつかの条件で値を返すことができない場合、選択できます.
  • 例外投げ
  • (戻りタイプがオブジェクト参照の場合)はnull
  • を返す.

  • 二つの方法の欠点
  • 異常は、異常が生成されるとスタックトラッキング全体がキャプチャされるため、コストもかかります.
  • 呼び出しが
  • nullを返す方法を返す場合は、追加のnull処理コードを追加する必要があります.
  • null処理を無視して返されたnull値をある場所に保存すると、ある日NullPointerExceptionが発生する可能性があります.
    これも根本的な原因であり,nullを返す実際の原因とは全く関係のないコードにある.
    Javaバージョンが8にアップグレードされるにつれて、また2つの選択肢が現れました.
    主人公はオプショナル
    null以外のTタイプ参照を含めるか、何も含まないことができます.
    何も装わない見張り先鋒が「空いた」と言った.
    逆に、一部の価値観の傍観者は「暇がない」と言っている.
    守望パイオニアは、最大1つの要素を持つことができる「不変」コレクションです.
    OptionalではCollectionは実現していませんが、原則としてはそうです.
    通常、Tを返す必要がありますが、いくつかの条件で何も返す必要がない場合は、Tではなく戻るオプションを宣言できます.
    有効な戻り値がない場合は、空の結果を返す方法が作成されます.
    傍観者の戻り方の利点
  • 例外を投げ出す方法は柔軟で使いやすく,nullを返す方法よりもエラーの可能性が低い.
  • コード55-1の集合の中で最も値を求める(集合が空の場合は例外を投げ出す)
    public static <E extends Comparable<E>> E max(Collection<E> c) {
        if (c.isEmpty())
            throw new IllegalArgumentException("빈 컬렉션");
            
        E result = null;
        for (E e : c)
            if (result == null || e.compareTo(result) > 0)
                result = Objects.requireNonNull(e);
        
        return result;
    }
    このメソッドに空のコレクションを渡すと、EllegalArgumentExceptionが放出されます.
    コード55−2の集合では、最小値を求めることによりOptionalに戻る.
    public static <E extends Comparable<E>> Optional<E> max(Collection<E> c) {
        if (c.isEmpty())
            return Optional.empty();
            
        E result = null;
        for (E e : c)
            if (result == null || e.compareTo(result) > 0)
                result = Objects.requireNonNull(e);
        
        return Optional.of(result);
    }
    適切な静的ファクトリを使用して外部環境を生成すればよい.
    2つの仕様があります.
  • Optional.Empty():空の訪問者が
  • を触る
  • Optional.of(value):バンド値を生成する傍観者(nullを加えるとNPEが放出される)
  • null値を許可する傍観者を作成するには、を選択します.ofNullable(value)を使用します.
  • 傍観者に戻る方法についてはnullを返さないでください.(先鋒の趣旨を完全に無視する行為)
    ストリームのエンドツーエンド計算では、多くの操作が返されます.
    上記の最大メソッドをストリームバージョンに再作成
    コード55-3のセットから最適値を取得し、オプション-ストリームバージョンを返す
    public static <E extends Comparable<E>> Optional<E> max(Collection<E> c) {
        return c.stream().max(Comparator.naturalOrder());
    }
    選択を終了する基準は?
  • オブザーバーの趣旨は検察官例外と似ている.(物品71)APIユーザに返却値がない可能性があることを明確に通知する.
  • メソッドが傍観者を返す場合、クライアントは値が取得されていない場合のアクションを選択します.
  • のデフォルト値を設定する方法
  • コード55-4使用範囲1-は、デフォルト値を設定することができる.
    String lastWordInLexicon = max(words).orElse("단어 없음...");
  • の状況に適合する異常放出
  • コード55−5は、2−所望の例外を投げ出すために広く用いられている.
    Toy myToy = max(toys).orElseThrow(TemperTantrumException::new);
    仮定値は常に

  • コード55−6は、外部3−仮定値を用いて常に満タンである.
    Element lastNobleGas = max(Elements.NOBLE_GASES).get();
    デフォルト値を設定する費用が多く負担になる場合があります.
    この場合、Supplierを引数としてORElseGetを使用すると、最初に値が必要なときにSupplierを使用して作成でき、初期設定コストを削減できます.
    より特殊な使い方→filter、map、flatMap、ifPresent
    まだ適切な方法が見つからない場合は、isPresentメソッドを参照してください.
    親プロセスのプロセスIDを出力するか、親プロセスがない場合は「N/A」のコードを出力します.
    Java 9で紹介されているProcessHandleクラスを使用しています.
    Optional<ProcessHandle> parentProcess = ph.parent();
    System.out.println("부모 PID: " + (parentProcess.isPresent() ? String.valueOf(parentProcess.get().pid()) : "N/A"));
    このコードはOptionalのmapを使用して次のように調整できます.
    System.out.println("부모 PID: + ph.parent().map(h -> String.valueOf(h.pid())).orElse("N/A"));
    Streamを使用すれば、Streamで視聴者を受信し、その中の充填視聴者から価格を抽出してStreamに渡して処理することができる.
    Java 8では、次のように実装されます.
    streamOfOptionals.filter(Option::isPresent)
                     .map(Optional::get)
    ご覧のように、傍観者が値(Optional::isPreset)→値を取り出して(Optional::get)ストリームにマッピングする場合
    Java 9は、Optionにstream():OptionをStreamに変換するアダプタを追加します.
    傍観者に値がある場合は、その値を要素のストリームに変換し、値がない場合は空のストリームに変換します.
    StreamのFlatMapメソッドと組み合わせると、前のコードを次のように変更できます.
    streamOfOptionals.flatMap(Optional::stream)
    コレクション、ストリーム、排出、受取などのコンテナタイプは受取小包ではいけません.
    空のオプションを返すよりも、空のリストを返します.
    空のコンテナをそのまま返すと、クライアントに外部処理コードを入れる必要はありません.

    メソッドの戻りタイプをTではなくOptionalと宣言します。

  • は結果がない場合があり、クライアントが特別な処理を行う必要がある場合はOptional
  • に戻る.
    ミシンを入れた基本タイプのチョッキは、基本タイプ自体よりも重いしかありません.
    価格は2階建てですから.
    そこでJava APIデザイナーはint,long,double専用の外部クラスを用意した.
    → OptionalInt, OptionalLong, OptionalDouble
    このような代替材料がある以上、ミシンの基本タイプが入ったゴーグルは返却しないでください.
    (Boolean、Byte、Character、Short、Floatを除く)
    傍観者は、集合のキー、値、要素、または配列の要素として使用するのにほとんど適していません.

    コアの整理

  • の値が戻らない可能性があり、呼び出されるたびに値が戻らない可能性を考慮すると、外来に戻る必要がある場合があります.
  • Butでは、傍観者が戻ると性能が低下し、性能に敏感な方法であればnullを返すか異常を放出することが望ましい.
  • 限定子を戻り値以外に使用する用途は少ない.