effective java 讀書筆記---第六章 枚舉與註解

30.用 enum 代替int 常量
不可修改,有意義的,對打印友好
枚舉類型可以聲明抽象方法,每個常量主體都需要自己實現
實例代碼如下:

public enum TestMenu
{
    PLUS
    {
        @Override
        double apply(double x, double y)
        {
            return x + y;
        }
    },
    MINUS
    {
        @Override
        double apply(double x, double y)
        {
            return x - y;
        }
    };

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

enum 還可以用來實現單例模式,enum 天然就是線程安全與單例的,因此不需要進行雙空檢查
enum 會自動產生一個 valueOf(String)方法,將常量名字轉換成常量本身,如果覆蓋了 toString 方法,最好提供一個 fromString 方法,可以將 toString 方法展示的內容實現與 valueOf 類似的功能
枚舉通常用來 switch 的分支語句使用,如果在其他類中使用枚舉,在枚舉中添加常量時,不能保證,switch 分支語句添加相應的功能,爲了保證這一實現,可以使用策略枚舉,在枚舉類中添加一個嵌套枚舉,在嵌套枚舉中實現switch 分支語句的功能(這個用法與聲明抽象方法類似,但這個一般用來多個枚舉對應相同的行爲,不必在每個枚舉中自己實現代碼)

31.用實例域代替序數
枚舉提供一個序數方法ordinal()返回枚舉實例的序數,但永遠不要根據枚舉的序數導出與它關聯的值,而是要將它保存在一個實例域中,除非使用基於枚舉的數據結構,否則永遠不要使用 ordinal 方法

32.使用 EnumSet 代替位域
位域: public static final int STYLE_BLOD = 1<<0

33.使用EnumMap代替序數索引

34.使用接口模擬可伸縮的枚舉

35.註解優先於命名模式
isAnnotationPresent方法,可以返回是否添加某個註解
這一段介紹瞭如何使用自定義註解

36.堅持使用Override 註解
覆蓋超類聲明的每個方法時都需要使用這個註解

37.使用標記接口定義類型
沒有包含方法聲明的接口即爲標記接口,例如Serializable接口即用來表明類可以被序列化,但並沒有提供任何方法
標記註解與標記接口各有優劣

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章