欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

EffectiveJava——枚舉篇精華總結(jié)-創(chuàng)新互聯(lián)

JAVA推薦使用枚舉代替int

1 枚舉提供了類型安全檢測(cè)
2 枚舉隔離了使用的類和枚舉類型,使增加和重排無(wú)需重新編譯
3 本質(zhì)上是單元素枚舉,final類型,不支持?jǐn)U展(繼承),但是可以自由使用接口和方法。
4 便于理解,維護(hù)
5 絕對(duì)安全的單例類型(相對(duì)于雙重鎖,無(wú)法被反序列化創(chuàng)造多個(gè)實(shí)例)

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括合水網(wǎng)站建設(shè)、合水網(wǎng)站制作、合水網(wǎng)頁(yè)制作以及合水網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,合水網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到合水省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
Android 不建議使用枚舉的原因

1 手機(jī)內(nèi)存資源有限,ENUM將會(huì)增大最終的DEX文件,大約是Integer常量的13倍,大量使用會(huì)影響程序性能。
2 虛擬機(jī)加載枚舉類,并且實(shí)例化所有的枚舉項(xiàng),并且這些枚舉實(shí)例的內(nèi)存無(wú)法回收,而且枚舉是單例,如果自定義的枚舉類中包含了大塊內(nèi)存的引用,也可能會(huì)帶來(lái)內(nèi)存泄露。

實(shí)例域代替系數(shù)

永遠(yuǎn)不要根據(jù)枚舉的序數(shù)導(dǎo)出與它關(guān)聯(lián)的值(ordinal()方法雖然從0開(kāi)始,但是當(dāng)常量重排序時(shí)會(huì)混亂),而是要將它保存在一個(gè)實(shí)例域中:

public enum Ensemble {

SOLO(1), DUET(2), TRIO(3),  QUARTET(4), QUINTET(5),

private final int numberOfMusicians;

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

public int numberOfMusicians() { return numberOfMusicians;}

}
EnumSet代替位域

位域:text.applyStyles(STYLE_BOLD | STYLE_ITALIC);

位域表示的缺陷:位域以數(shù)字形式打印時(shí),翻譯位域比翻譯簡(jiǎn)單的int枚舉常量要困難得多;要遍歷位域表示的所有元素也沒(méi)有很容易的方法。

EnumSet:

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

// Any Set could be passed in , but EnumSet is clearly best

public void applyStyles(Set<Style> styles) { ... }
}

使用:text.applyStyles(EnumSet.of(Style.BOLD , Style.ITALIC));

EnumSet缺點(diǎn):即截止Java 1.6發(fā)行版本,他都無(wú)法創(chuàng)建不可變的EnumSet,但是這一點(diǎn)很可能在即將出現(xiàn)的版本中得到修正。同時(shí),可以用Collections.unmodifiableSet將EnumSet封裝起來(lái),但是間接性和性能會(huì)受到影響。

用EnumMap代替序數(shù)索引

EnumMap優(yōu)點(diǎn):
1 結(jié)構(gòu)清晰,如果用索引,無(wú)法知道索引與對(duì)應(yīng)集合的關(guān)系)
2 安全,相對(duì)于索引作為key,當(dāng)修改對(duì)應(yīng)集合時(shí),如果未修改索引可能引發(fā)重大問(wèn)題。

示例:

public enum Phase {
    SOLID, LIQUID, GAS;

    public enum Transition {
        MELT(SOLID,LIQUID), FREEZE(LIQUID, SOLID),
        BOIL(LIQUID, GAS), CONDENSE(GAS, LIQUID),
        SUBLIME(SOLID, GAS), DEPOSIT(GAS, SOLID);

        private final Phase src;
        private final Phase dst;

        Transition(Phase src, Phase dst) {
            this.src = src;
            this.dst = dst;
        }

        private static final Map<Phase, Map<Phase, Transition>> m =
                new EnumMap<Phase, Map<Phase, Transition>>(Phase.class);
        static {
            for(Phase p : Phase.values())
                m.put(p, new EnumMap<Phase, Transition>(Phase.class));
            for(Transition t : Transition.values())
                m.get(t.src).put(t.dst, t);
        }

        public static Transition from(Phase src, Phase dst) {
            return m.get(src).get(dst);
        }
    }
}
用接口模擬可伸縮的枚舉

枚舉為final,無(wú)法通過(guò)繼承擴(kuò)展,但可以使用接口方式擴(kuò)展

public interface Operation {
    double apply(double x,double y);
}

public enum BasicOperation implements Operation {   
    PLUS("+"){      
        public double apply(double x, double y) {           
            return x + y;
        }
    },
    MINUS("-"){ 
        public double apply(double x, double y) {           
            return x - y;
        }
    };  
    private final String symbol;
    BasicOperation(String symbol) {
        this.symbol = symbol;
    }   
    @Override
    public String toString(){
        return symbol;
    }
}
public enum ExtendedOperation implements Operation{
    Exp("^"){
        public double apply(double x,double y){
            //次冪計(jì)算
            return Math.pow(x, y);
        }
    },
    REMAINDER("%"){
        public double apply(double x,double y){
            return x % y;
        }
    };

    private final String symbol;
    ExtendedOperation(String symbol) {
        this.symbol = symbol;
    }
    @Override
    public String toString(){
        return symbol;
    }
}

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

分享題目:EffectiveJava——枚舉篇精華總結(jié)-創(chuàng)新互聯(lián)
地址分享:http://www.chinadenli.net/article20/dcssco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航營(yíng)銷型網(wǎng)站建設(shè)網(wǎng)站設(shè)計(jì)公司軟件開(kāi)發(fā)網(wǎng)頁(yè)設(shè)計(jì)公司服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)