整理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);
}