nullではなく空のコレクションまたは配列を返します.


public enum LottoRank {
    FIFTH(3, 5000),
    FOURTH(4, 50000),
    THIRD(5, 1500000),
    SECOND(5, 30000000),
    FIRST(6, 2000000000);

    private final int correctNumber;
    private final int prizeAmount;

    LottoRank(final int correctNumber, final int prizeAmount) {
        this.correctNumber = correctNumber;
        this.prizeAmount = prizeAmount;
    }
    
    public static LottoRank valueOf(int sameCount, boolean bonus) {
    if (sameCount == 5) {
        return checkSecondOrThird(bonus);
    }
    return Arrays.stream(LottoRank.values())
            .filter(lottoRank -> lottoRank.getCorrectNumber() == sameCount)
            .findFirst()
            .orElse(null);
}
宝くじに当たった人をenum値で表し、当たった人がいない人は別に作っていません.そのため、当選しなかった人はnullを返して問題を解決した.しかしnullを返却する過程で、不安な感じがして、ちょうどこの効果javaに該当する内容があったので、読んで整理してみました.
単品54.nullではなく空のコレクションまたは配列を返します.
public class CandyStore {
    private final List<Candy> candiesInStock;

    public List<Candy> getCandiesInStock() {
        return candiesInStock.isEmpty() ? null : new ArrayList<>(candiesInStock);
    }
}
キャンディショップの在庫を知るプログラムに在庫がない場合は、nullに戻ります.この方法を使用する場合は、nullを処理するコードを追加する必要があります.
List<Candy> candies = candyStore.getCandiesInStock();
if (candies != null && candies.contains(Candy.RED)) {
    System.out.println("빨간 사탕이 있지");
}
nullを処理しないとNullPointerExceptionが発生する.したがって,著者らは空の集合または配列を返すことを要求する.
空き容器の割り当てにも費用がかかる人もいるのでnullに戻ったほうがいいです.しかし、これは両方とも誤った主張だ.
1.この程度のパフォーマンスの違いは、まだ十分ではありません.
空のコンテナの割り当てがパフォーマンスの低下の主な原因であると判断しない限り、効率的なプログラムではなく、メンテナンスに適した設計を採用することが望ましい.
アイテム67を慎重に最適化してください.高速プログラムよりも良いプログラムを作成してください.
2.空のコレクションと配列は、再割り当てなしで返却できます.
public List<Candy> getCandiesInStock() {
     return new ArrayList<>(candiesInStock);
}
このコードがパフォーマンスを低下させても、次のコードのように記述すれば解決されます.そして必ず改善結果を確認します.
public List<Candy> getCandiesInStock() {
   return candiesInStock.isEmpty() ? Collections.emptyList()
   	: new ArrayList<>(candiesInStock);
}
適用-LottoRank.NOTHINGを返します.
public enum LottoRank {
    NOTHING(0, 0),
    FIFTH(3, 5000),
    FOURTH(4, 50000),
    THIRD(5, 1500000),
    SECOND(5, 30000000),
    FIRST(6, 2000000000);

    private final int correctNumber;
    private final int prizeAmount;

    LottoRank(final int correctNumber, final int prizeAmount) {
        this.correctNumber = correctNumber;
        this.prizeAmount = prizeAmount;
    }

    public static LottoRank valueOf(int sameCount, boolean bonus) {
        if (sameCount == 5) {
            return checkSecondOrThird(bonus);
        }
        return Arrays.stream(LottoRank.values())
                .filter(lottoRank -> lottoRank.getCorrectNumber() == sameCount)
                .findFirst()
                .orElse(NOTHING);
}
nullを返却するのではなく、NOTHINGを返却して解決します.また、今回の任務評論家のダン氏は以下のように共有されている.

Reference
Effective Java p.323「nullではなく空の集合または配列を返す」