如果一個方法回傳 null,而不是空陣列或空集合,這樣每次調用該方法後都需要判斷回傳是否為 null,容易出錯且會使程式碼不美觀。
public List<Cheese> getCheeses() {
return cheesesInStock.isEmpty() ? null
: new ArrayList<>(cheesesInStock);
}
ListCheese cheeses = shop.getCheese();
if (cheeses != null && cheeses.contains(Cheese.STILTON)) {
...
}
有時候會認為回傳 null 比空陣列或是空集合更好,因為它不需要生成長度為 0 的陣列或是集合,擔心效能受到影響,其實效能受到影響的機率相當低,除非已經有明確證明這樣的用法確實是效能瓶頸。如果想要避免產生太多實體,可以產生共用的空陣列或是空集合實體,讓每次回傳時不需要重複產生實體。// empty collection
public List<Cheese> getCheeses() {
return cheesesInStock.isEmpty() ? Collections.emptyList()
: new ArrayList<>(cheesesInStock);
}
// empty array
private static final Cheese[] EMPTY_CHEESE_ARRAY = new Cheese[0];
public Cheese[] getCheeses() {
return cheesesInStock.toArray(EMPTY_CHEESE_ARRAY);
}
轉載請註明原文網址 https://cookieandcoketw.blogspot.com/2021/03/effective-java-54-not-null.html
沒有留言:
張貼留言