<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    少年阿賓

    那些青春的歲月

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

    java的Enum枚舉類型終于在j2se1.5出現了。之前覺得它只不過是雞肋而已,可有可無。畢竟這么多年來,沒有它,大家不都過得很好嗎?今日看《Thinking in Java》4th edition,里面有一句話“有時恰恰因為它,你才能夠"優雅而干凈"地解決問題。優雅與清晰很重要,正式它們區別了成功的解決方案與失敗的解決方案。而失敗的解決方案就是因為其他人無法理他。"使用Enum枚舉類型,可以將以前笨拙的代碼變得優雅簡單?但是,我同時也在思考另外一個問題,使用新的技術,會不會給技術人員帶來更多的負擔呢?

    "學習新版語言的一個危險就是瘋狂使用新的語法結構"

    先學習一下enum的簡單應用,以下簡潔的代碼已經包括enum所提供的絕大部分功能。

    1.enum的應用,包括定義,遍歷,switch,enumset,enummap等

    Java代碼 

     

     import java.util.EnumMap;
    import java.util.EnumSet;
    public class EnumTest {
     // 定義一個enum枚舉類型,包括兩個實例ON,OFF
     public enum State {
      ON, OFF
     };
     // 測試函數
     public static void main(String[] args) {
      // 直接變量enum
      for (State s : State.values())
       System.out.println(s.name());
      // switch與enum的結合使用
      State switchState = State.OFF;
      switch (switchState) {
      case OFF:
       System.out.println("OFF");
       break;
      case ON:
       System.out.println("ON");
       break;
      }
      // EnumSet的使用
      EnumSet<State> stateSet = EnumSet.allOf(State.class);
      for (State s : stateSet) {
       System.out.println(s);
      }
      // EnumMap的使用
      EnumMap<State,String> stateMap = new EnumMap<State,String>(State.class);
      stateMap.put(State.ON, "is On");
      stateMap.put(State.OFF, "is off");
      for (State s : State.values()) {
       System.out.println(s.name() + ":" + stateMap.get(s));
      }
     }

     

     



    package com.aicent.test;
    public enum TestEnumMathod {
     // 為每個enum實例添加不同的實現方法
     SAMPLE1 {
      String getInfo() {
       return "SAMPLE1";
      }
     },
     SAMPLE2 {
      String getInfo() {
       return "SAMPLE2";
      }
     };
     abstract String getInfo();
     // 測試
     public static void main(String args[]) {
      for (TestEnumMathod method : values()) {
       System.out.println(method.getInfo());
      }
     }
    }




    以下內容可能有些無聊,但絕對值得一窺
    1.代碼:
    public class State {
    public static final int ON = 1;
    public static final Int OFF= 0;
    }

     

    有什么不好了,大家都這樣用了很長時間了,沒什么問題啊。
    首先,它不是類型安全的。你必須確保是int
    其次,你還要確保它的范圍是0和1
    最后,很多時候你打印出來的時候,你只看到 1 和0 ,

    但其沒有看到代碼的人并不知道你的企圖,拋棄你所有舊的public static final常量吧

    2.可以創建一個enum類,把它看做一個普通的類。除了它不能繼承其他類了。(java是單繼承,它已經繼承了Enum),
    可以添加其他方法,覆蓋它本身的方法

    3.switch()參數可以使用enum了

    4.values()方法是編譯器插入到enum定義中的static方法,所以,當你將enum實例向上轉型為父類Enum是,values()就不可訪問了。解決辦法:在Class中有一個getEnumConstants()方法,所以即便Enum接口中沒有values()方法,我們仍然可以通過Class對象取得所有的enum實例

    5.無法從enum繼承子類,如果需要擴展enum中的元素,在一個接口的內部,創建實現該接口的枚舉,以此將元素進行分組。達到將枚舉元素進行分組。

    6.使用EnumSet代替標志。enum要求其成員都是唯一的,但是enum中不能刪除添加元素。

    7.EnumMap的key是enum,value是任何其他Object對象。

    8.enum允許程序員為eunm實例編寫方法。所以可以為每個enum實例賦予各自不同的行為。

    9.使用enum的職責鏈(Chain of Responsibility) .這個關系到設計模式的職責鏈模式。以多種不同的方法來解決一個問題。然后將他們鏈接在一起。當一個請求到來時,遍歷這個鏈,直到鏈中的某個解決方案能夠處理該請求。

    10.使用enum的狀態機

    11.使用enum多路分發

     

    轉載自:http://blog.csdn.net/mqboss/article/details/5647851

    posted on 2012-03-15 11:16 abin 閱讀(464) 評論(0)  編輯  收藏 所屬分類: java集合類
    主站蜘蛛池模板: 亚洲视频.com| 亚洲人成色在线观看| 91短视频免费在线观看| 亚洲制服丝袜第一页| 亚洲精品无码激情AV| 无码国产精品一区二区免费式芒果 | 香港特级三A毛片免费观看| 亚洲色偷偷综合亚洲AVYP| 1024免费福利永久观看网站| 国产成人亚洲精品电影| 亚洲男人天堂av| 国产成人无码免费视频97| 无码av免费网站| 爱情岛亚洲论坛在线观看| 亚洲精品高清久久| 一级毛片直播亚洲| 免费三级毛片电影片| 精品国产免费一区二区三区| 亚洲乱码在线观看| 亚洲国产精品成人精品无码区在线 | 亚洲AV无码国产剧情| 337p欧洲亚洲大胆艺术| 亚洲精品成人a在线观看| 免费av欧美国产在钱| 日本免费电影一区二区| 免费看一级毛片在线观看精品视频| 亚洲精品在线播放| 国产亚洲AV无码AV男人的天堂| 日韩一级免费视频| 免费看黄视频网站| 久久久久成人精品免费播放动漫| 免费无码午夜福利片 | 免费无遮挡无码视频在线观看| 日本亚洲精品色婷婷在线影院| 亚洲va久久久噜噜噜久久狠狠| 亚洲av区一区二区三| 最新免费jlzzjlzz在线播放| 69视频在线观看高清免费| 日本一区午夜艳熟免费| 免费大片黄在线观看| 国产成人va亚洲电影|