亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Effective Java讀書筆記二:枚舉和注解(30-37)

2019-11-14 10:52:15
字體:
來源:轉載
供稿:網友

第30條:用enum代替int常量

當需要一組固定常量的時候,應該使用enum代替int常量,除了對于手機登資源有限的設備應該酌情考慮enum的性能弱勢之外。

第31條:用實例域代替序數

枚舉的ordinal()方法會返回枚舉常量在類型中的數字位置, 但是盡量不要使用它,因為當重新排序后,會對客戶端造成破壞。 正確的做法是,將他保存在一個實例域中。

應該給enum添加int域,而不是使用ordinal方法來導出與枚舉關聯的序數值。(幾乎不應使用ordinal方法,除非在編寫像EnumMap這樣的基于枚舉的通用數據結構)

//WRONGpublic enum Fruit{ APPLE, PEAR, ORANGE; public int numberOfFruit(){ return ordinal() + 1; }}//RIGHTpublic enum Fruit{ APPLE(1), PEAR(2), ORANGE(3); PRivate final int number; Fruit(int num) {number = num;} public int numberOfFruit(){ return number; }}

第32條:用EnumSet代替位域

每個EnumSet的內容都表示為位矢量。如若底層的枚舉類型個數小于64個,則整個EnumSet就用單個long來表示,因此性能上比的上位域。

//WRONGpublic class Text{ private static final int STYLE_BOLD = 1 << 0; private static final int STYLE_ITALIC = 1 << 1; private static final int STYLE_UNDERLINE = 1 << 2; public void applyStyles(int styles) {...}}//usetext.applyStyles(STYLE_BOLD | STYLE_ITALIC);//RIGHTpublic class Text{ public enum Style{STYLE_BOLD, STYLE_ITALIC, STYLE_UNDERLINE} public void applyStyles(Set<Style> styles) {...} //這里不使用EnumSet<Style>參數是因為考慮到某些客戶端可能會傳遞一些其他的Set實現}//usetext.applyStyles(EnumSet.of(STYLE_BOLD, STYLE_ITALIC));EnumSet 實現了 Set 接口,提供了豐富的功能,類型安全.可以從其他任何Set中得到互換性.整個 EnumSet 就是用 單個 long 來表示的,性能上比得上 位運算的性能.總而言之因為枚舉類型要用在集合(Set)中,所以沒有理由用位域來表示.

第33條:用EnumMap代替序數索引

序數索引是指依賴于枚舉成員在枚舉中的序數來進行數組索引,如:

//定義了植物類,其中植物又分為水果,蔬菜,樹木三種public class Plant{ public enum Type { Fruit, Vegetables, Tree} private final String name; private final Type type; Plant(String name, Type type){ this.name = name; this.type = type; }}Set<Plant>[] plants = (Set<Plant>[]) new Set[Plant.Type.valuse().lenght]; //根據植物的類型,分別把所有的植物放入三個set中for(int i = 0; i < plant.lenght; i++){ plant[i] = new HashSet<Plant>();}for(Plant p : garden){ //garden里放了所有的植物 plant[p.type.ordinal()].add(p) //反面教材:利用了枚舉的序數來得到想要的數組索引,用戶在其他地方可以不使用ordinal函數,而直接使用int值來訪問,就可能出錯}

應該使用EnumMap來實現,EnumMap內部是采用數組實現的,具有Map的豐富功能和類型安全以及數組 的效率:

Map<Plant.Type, Set<Plant>> plants = new EnumMap<Plant.Type, Set<Plant>>(Plant.Type.class); //構造函數需要 鍵 類型的Class對象//根據植物的類型,分別把所有的植物放入三個set中for(Plant.Type type : Plant.Type.valuse()){ plant.put(type, new HashSet<Plant>);}for(Plant p : garden){ //garden里放了所有的植物 plant.get(p.type).add(p) //用戶必須使用正確的鍵值來訪問,即Type類型}

當需要多維關系時,可以使用EnumMap<…, EnumMap<…>>

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

1、如果讓一個 枚舉類型 去擴展另一個 枚舉類型,利用語言的特性,幾乎是不可能的 2、枚舉的可擴展性,到最后都證明不是一個好點子.

由于在java中enum不是可擴展的,在某些情況下,可能需要對枚舉進行擴展,比如操作類型(+-*/等),就可以考慮: 1.定義一個接口,比如public interface Operation{…}; 2.使枚舉繼承接口:比如public enum BasicOperation implements Operation{…} 3.使用時的API寫成接口(比如,T extends Enum & Operation),而不是實現(比如BasicOperation )

private static <T extends Enum<T> & Operation> void function(T t,..); //表示T即表示枚舉又是Operation的子類型

4.當需要擴展BasicOperation枚舉時,就可以另寫一個枚舉,且implements接口Operation

第35條:注解優先于命名模式

優先使用注解來表面針對某些程序元素的特定信息。 注解的優勢:

@Retention : 限定保留時期@Target: 限定其應用的程序元素還有很多注解,如 @IntDef,@ViewDebug…注解接收的參數如果是數組,為其賦值一個單獨的元素也是合法的

第36條:堅持使用Override注解

在想要覆蓋的方法上使用Override注解,編譯器就可以幫助發現一些錯誤。可以不寫Override的特例:在具體類中不必標注你確信覆蓋了抽象方法聲明的方法(雖然這么做也沒有什么壞處)。

第37條:用標記接口實現類型

標記分為標記接口和標記注解。

標記接口:沒有包含方法聲明的接口,只是指明某個類實現了具有某種屬性的接口。比如Serializable接口,通過實現這個接口,類表明它的實例可以被寫到ObjectOutputStream。。

標記接口與標記注解的最終要的區別在于: 標記接口可以在編譯時就檢查到相應的類型問題,而標記注解則要到運行時。

標記接口優勢:

標記接口定義的類型是由 被標記的類的實例 實現的,標記注解 則沒有定義這樣的類型他們可以被更加精確的進行鎖定,比如 如果注解類型利用 @Target(ElementType.TYPE) 標記,則它可以被應用到任何類或者接口上

標記注解優勢:

它可以 通過默認的方式 添加 一個或者多個注解類型元素,給 已被使用的注解類型添加更多的信息.隨著時間的推移,簡單的標記注解類型可以演變成更加豐富的注解類型.他們是更大的注解機制的一部分.

使用:

如果標記是應用到任何程序元素而不是類或者接口,就必須使用注解. 因為只有 類和接口可以用來實現或者擴展接口如果標記只應用給類和接口,就應該 優先使用標記接口而非注解

《Effective Java中文版 第2版》PDF版下載: http://download.csdn.net/detail/xunzaosiyecao/9745699

作者:jiankunking 出處:http://blog.csdn.net/jiankunking


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕在线观看亚洲| 亚洲美女久久久| 一本色道久久88综合亚洲精品ⅰ| 国模叶桐国产精品一区| 麻豆乱码国产一区二区三区| 亚洲伦理中文字幕| 国产精品免费看久久久香蕉| 91精品免费久久久久久久久| 国产精品网址在线| 色樱桃影院亚洲精品影院| 亚洲自拍偷拍在线| 欧美亚洲午夜视频在线观看| 日韩中文字幕在线播放| 久久成人人人人精品欧| 热99精品只有里视频精品| 久久久久国产一区二区三区| 国产精品91视频| 夜夜嗨av一区二区三区免费区| 精品中文字幕在线2019| 亚洲欧洲日韩国产| 欧美中文字幕在线| 国产极品精品在线观看| 欧美日韩亚洲国产一区| 91在线播放国产| 欧美一级淫片videoshd| 亚洲日本中文字幕免费在线不卡| 最近2019中文字幕一页二页| 亚洲精品99久久久久| 动漫精品一区二区| 91免费国产网站| 日韩免费观看在线观看| 色播久久人人爽人人爽人人片视av| 欧美大人香蕉在线| 精品毛片三在线观看| 精品女同一区二区三区在线播放| 国产日韩综合一区二区性色av| 国产精品高潮粉嫩av| 欧美激情女人20p| 欧美激情高清视频| 91久久久久久国产精品| 宅男66日本亚洲欧美视频| 亚洲一区二区日本| 成人精品网站在线观看| 亚洲视频专区在线| 国产精品视频yy9099| 国产精品久久久久7777婷婷| 久久久久久18| 亚洲午夜女主播在线直播| 一区二区三区在线播放欧美| 亚洲欧洲一区二区三区久久| 色777狠狠综合秋免鲁丝| 51ⅴ精品国产91久久久久久| 久久人人爽亚洲精品天堂| 国产精品欧美日韩久久| 美女久久久久久久久久久| 中文字幕日韩欧美在线视频| 国产精品成人v| 国产精品国产三级国产aⅴ9色| 欧美性猛交xxxx免费看久久久| 国产精品久久久久久超碰| 日韩av在线免费观看一区| 国产亚洲精品久久久久久| 久久久成人av| 美女久久久久久久久久久| 欧美裸体xxxx极品少妇软件| 欧美激情久久久| 欧美精品videossex88| 日韩欧美国产骚| 色先锋资源久久综合5566| 欧美俄罗斯性视频| 九九九久久久久久| 亚洲视频在线观看| 欧美成人在线影院| 成人精品在线视频| 色无极影院亚洲| 69国产精品成人在线播放| 亚洲精品国产综合区久久久久久久| 欧美性理论片在线观看片免费| 热99精品只有里视频精品| 中文字幕欧美日韩精品| 在线观看视频99| 国产综合色香蕉精品| 日韩在线免费观看视频| 日日骚久久av| 久久999免费视频| 91免费精品国偷自产在线| 国产美女91呻吟求| 九九九久久国产免费| 欧美激情欧美狂野欧美精品| 欧美中文字幕第一页| 日韩av网站导航| 久久精品视频导航| 久久手机免费视频| 国产精品v日韩精品| 久久精品亚洲一区| 精品在线小视频| 精品国产91久久久久久老师| 韩国欧美亚洲国产| 日韩免费在线看| 97在线精品国自产拍中文| 91成人福利在线| 日韩国产高清视频在线| 狠狠久久五月精品中文字幕| 久久久久久亚洲精品中文字幕| 欧美日韩国产一区在线| 黑人巨大精品欧美一区二区一视频| 91精品国产自产91精品| 久久天天躁狠狠躁老女人| 国产精品对白刺激| 少妇精69xxtheporn| 疯狂做受xxxx高潮欧美日本| 欧美做爰性生交视频| 亚洲国产日韩欧美在线图片| 亚洲精品美女久久久久| 国产欧美日韩视频| 性欧美在线看片a免费观看| 在线观看免费高清视频97| 成人国产亚洲精品a区天堂华泰| 美日韩在线视频| 欧美电影免费观看网站| 国产成人高潮免费观看精品| 亚洲人成电影在线| 欧美日韩另类视频| 狠狠躁天天躁日日躁欧美| 国产精品视频免费在线观看| 成人国产精品久久久久久亚洲| 成人免费淫片视频软件| 不卡伊人av在线播放| 成人免费看片视频| 久久亚洲综合国产精品99麻豆精品福利| 日韩av色综合| 亚洲一区二区三区乱码aⅴ| 色999日韩欧美国产| 91久热免费在线视频| 欧美精品电影免费在线观看| 欧美大片网站在线观看| 亚洲一级免费视频| 欧美超级乱淫片喷水| 亚洲天堂网站在线观看视频| 国产精品高潮呻吟久久av黑人| 91在线观看免费高清完整版在线观看| 91日韩在线播放| 精品国产区一区二区三区在线观看| 色琪琪综合男人的天堂aⅴ视频| 久久久人成影片一区二区三区| 一本一本久久a久久精品综合小说| 久久九九精品99国产精品| 中文字幕亚洲无线码在线一区| 78m国产成人精品视频| 久久视频国产精品免费视频在线| 国产福利成人在线| 国产精品aaaa| 欧美专区日韩视频| 精品久久久久久久久久久| 最近2019中文字幕在线高清| 色先锋久久影院av| 国产美女扒开尿口久久久| 国产精品久久国产精品99gif| 国产一区二区三区丝袜| 日韩欧美成人免费视频| 国产美女扒开尿口久久久| 日韩精品福利在线| 国产精品女人久久久久久| 97精品国产aⅴ7777|