Effective Java Item 41:用標記介面定義類型

整理 Effective Java 書中 Item 41: Use marker interfaces to define types 心得筆記

主旨

標記介面(Marker Interface)是沒有任何方法的介面,只是單純用來代表一個「型別」。雖然 Java 也可以用標註(annotation)來達到類似效果,但在要表示「某類型具備某種能力」時,還是推薦使用標記介面,因為它可以帶來更強的型別安全與語意明確性。

Read more

Effective Java Item 40:一致地使用 @Override 註解

整理 Effective Java 書中 Item 40: Use @Override annotations 心得筆記

主旨

在 Java 裡,如果你要「覆寫(override)」父類別或介面的某個方法,請務必加上 @Override 註解。這個小小的標記,不只是告訴編譯器「我想要覆寫」,更是一道保險機制,可以幫助你避免不小心寫出錯誤的程式碼。

Read more

Effective Java Item39:比起命名慣例,更推薦使用註解

整理Effective Java書中Item 39: Prefer annotations to naming patterns心得筆記

主旨

在 Java 裡,如果我們要標記一段程式碼是「特別用途」(像是測試方法),有兩種做法:一種是靠命名,例如把方法命名為 testXxx,另一種則是用註解(Annotation)。這篇建議我們盡量使用註解,而不要依賴命名慣例,因為註解更安全、更具可讀性,也更容易維護。

Read more

Effective Java Item38:用介面模擬可擴展的 enum

整理Effective Java書中Item 38: Emulate extensible enums with interfaces心得筆記

主旨

Java 的 enum 雖然功能強大,但有一個主要限制:enum 是封閉的類型,不能被擴展。這意味著一旦定義了 enum,就無法在不修改原始程式碼的情況下添加新的值。這篇文章介紹如何使用介面來解決這個問題。

問題:enum 的封閉性

public enum Operation {
    PLUS {
        double apply(double x, double y) { return x + y; }
    },
    MINUS {
        double apply(double x, double y) { return x - y; }
    },
    TIMES {
        double apply(double x, double y) { return x * y; }
    },
    DIVIDE {
        double apply(double x, double y) { return y == 0 ? Double.POSITIVE_INFINITY : x / y; }
    };

    abstract double apply(double x, double y);
}
Read more

Effective Java Item37:用 EnumMap 取代 int 索引的陣列

整理Effective Java書中Item 37: Use EnumMap instead of ordinal indexing心得筆記

主旨

在 Java 中,我們有時會用 int 索引的陣列來儲存與 enum 相關的資料,但這種做法容易造成型別不安全和可讀性問題。Java 提供了 EnumMap 類別,專門用來處理 enum 類型的映射關係,提供更安全、更清楚的解決方案。

問題:int 索引陣列的缺點

假設我們要儲存每個星期幾的開門時間,傳統作法可能會這樣寫:

public class StoreHours {
    private static final int[] OPENING_HOURS = {
        9,  // Monday
        9,  // Tuesday
        9,  // Wednesday
        9,  // Thursday
        9,  // Friday
        10, // Saturday
        10  // Sunday
    };

    public int getOpeningHour(Day day) {
        return OPENING_HOURS[day.ordinal()];
    }
}
Read more