2021/03/24

[筆記] Effective Java #54 回傳零長度的陣列或集合,而不是 null

Effective Java 3rd 簡體中文版筆記 #54 返回零長度的陣列或集合,而不是 null
如果一個方法回傳 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

沒有留言:

張貼留言