Effective Java讀書筆記--第6章 枚舉和注解

個(gè)人讀書筆記,部分沒讀懂的知識(shí)點(diǎn)可能會(huì)簡單概括或缺失,以后反復(fù)閱讀后再完善。

第6章 枚舉和注解

第30條:用enum代替int常量

int枚舉模式:

public static final int APPLE_FUJI=0;
public static final int APPLE_PIPPIN=1;
public static final int APPLE_GRANNY_SMITH=2;

int枚舉模式如果與枚舉常量關(guān)聯(lián)的int發(fā)生了變化,客戶端就必須重新編譯。

枚舉類型:

public enum Apple{FUJI,PIPPIN,GRANNY_SMITH}

第31條: 用實(shí)例域代替序數(shù)

ordinal方法返回每個(gè)枚舉常量在類型中的數(shù)字位置。

    public enum Ensemble{
        SOLO,DUET,TRIO,QUARTET,QUINTET,
        SEXTET,SEPTET,OCTET,NONET,DECTET;

        public int numberOfMusicians() { return ordinal()+1; }
    }

但最好用這種寫法:

    public enum Ensemble{
        SOLO(1),DUET(2),TRIO(3),QUARTET(4),QUINTET(5),
        SEXTET(6),SEPTET(7),OCTET(8),NONET(9),DECTET(10),
        TRIPLE_QUARTET(12);
        private final int numberOfMusicians;

        Ensemble(int size) {
            this.numberOfMusicians = size;
        }
        public int numberOfMusicians() { return numberOfMusicians; }
    }

第31條: 用EnumSet代替位域

int枚舉模式:

public class Text {
    public static final int STYLE_BOLD=1<<0;
    public static final int STYLE_ITALIC=1<<1;
    public static final int STYLE_UNDERLINE=1<<2;
    public static final int STYLE_STRIKETHROUGH=1<<3;

    public void applyStyles(int styles) {
        
    }
}

這種表示法讓你用OR運(yùn)算符將幾個(gè)常量合并到一個(gè)集合中,稱作位域

text.applyStyles(STYLE_BOLD|STYLE_ITALIC);

用枚舉代替位域后的代碼:

public class Text {
    public enum Style{BOLD,ITALIC,UNDERLINE,STRIKETHROUGH}

    public void applyStyles(Set<Style> styles) {

    }
}

客戶端代碼:

text.applyStyles(EnumSet.of(Text.Style.BOLD, Text.Style.UNDERLINE));

正是因?yàn)槊杜e類型要用在集合中,所以沒有理由用位域來表示它。

第33條: 用EnumMap代替序數(shù)索引

第34條: 用接口模擬可伸縮的枚舉

雖然無法編寫可擴(kuò)展的枚舉類型,卻可以通過編寫接口以及實(shí)現(xiàn)接口的基礎(chǔ)枚舉類型。

第35條: 注解優(yōu)于命名模式

第36條: 堅(jiān)持使用Override注解

第37條: 用標(biāo)記接口定義類型

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容