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ではなく空の集合または配列を返す」
Reference
この問題について(nullではなく空のコレクションまたは配列を返します.), 我々は、より多くの情報をここで見つけました https://velog.io/@mohai2618/null이-아닌-빈-컬렉션이나-배열을-반환하라テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol