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

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

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

    聶永的博客

    記錄工作/學習的點點滴滴。

    枚舉:不用那么單調,可以承擔一些業務意義

    人們大多順手定義了一個枚舉,僅僅是值的羅列,比如常見的一個,定義一個顏色枚舉:
    public enum Color {
    RED,GREEN,BLUE
    }
    人們很少去想這么一個問題:枚舉應該也可以承擔一些業務意義。比如在這個Color枚舉中,在某些情況下,我們需要得到顏色的名稱,并且具有一個數字版本的ID,若能提供一個隨機的顏色值就更好不過了。怎么辦 ?
    大部分人們會另建立一個類,提供幾個方法,對枚舉進行操作,以達到目的。但是這些方法本身應該是Color自身的一些動作,只是被割裂了。下面的代碼就能很好的完成以上要求:
    public enum Color {
    RED("red",1),GREEN("green",2),BLUE("blue",3);

    private String name;
    private int id;

    /**
    * 必須的,使用一個構造函數用以初始化枚舉常量
    * @param name
    * @param id
    */

    private Color(String name, int id){
    this.name = name;
    this.id = id;
    }

    public String getName(){
    return this.name;
    }

    public int getId(){
    return this.id;
    }
    }
    枚舉是一個class變體,類似于 RED("red",1) 可以看做是定了一個初始化Color的一個實例,其構造方法簽名具有兩個參數需要傳入。
    現在的調用方式:
    Color.RED.getName(), Color.RED.getId()

    嗯,缺少了一個隨機的顏色輸出方法,下面我們在Color里面添加如下代碼:
     private static Random random = new Random(47);

    /**
    * 隨機提供一個顏色 使用方法 : Color color = Color.random();
    *
    * @return Color
    */

    public static Color random() {
    Color[] colors = Color.values();
    return colors[random.nextInt(colors.length)];
    }

    要想提供一個隨機的顏色值,那就是靜態的,不是一個具體顏色的本身屬性。枚舉都是具有values屬性,返回一個數組。使用方法為 
    Color color = Color.random();
    //一些屬性的獲取等操作
    有時,我們需要傳入一個顏色值字符串獲得對應的枚舉值:
     /**
    * 構造一個Map,并初始化,便于插敘
    */

    private static Map<String, Color> clorNameMap = new HashMap<String, Color>(
    Color.values().length);
    static {
    for (Color color : Color.values()) {
    clorNameMap.put(color.getName(), color);
    }
    }

    /**
    * 通過顏色名稱獲取顏色枚舉實例
    * @return
    */

    public static Color getByName(String colorName){
    return clorNameMap.get(colorName);
    }
    構造了一個私有的Map對象,提升查詢時的速度。使用方法:
    Color color = Color.getByName(“red”);
    若通過ID進行查詢也可以按此方法,這里不再提供。下面為完整的代碼:




    import java.util.HashMap;
    import java.util.Map;
    import java.util.Random;

    /**
    * 枚舉可以承擔一些業務意義
    *
    * @author yongboy@gmail.com
    * @date 2010-10-21
    */

    public enum Color {
    RED("red", 1), GREEN("green", 2), BLUE("blue", 3);

    private String name;
    private int id;

    /**
    * 必須的,使用一個構造函數用以初始化枚舉常量
    *
    * @param name
    * @param id
    */

    private Color(String name, int id) {
    this.name = name;
    this.id = id;
    }

    public String getName() {
    return this.name;
    }

    public int getId() {
    return this.id;
    }

    private static Random random = new Random(47);

    /**
    * 隨機提供一個顏色 使用方法 : Color color = Color.random();
    *
    * @return Color
    */

    public static Color random() {
    Color[] colors = Color.values();
    return colors[random.nextInt(colors.length)];
    }

    /**
    * 構造一個Map,并初始化,便于插敘
    */

    private static Map<String, Color> clorNameMap = new HashMap<String, Color>(
    Color.values().length);
    static {
    for (Color color : Color.values()) {
    clorNameMap.put(color.getName(), color);
    }
    }

    /**
    * 通過顏色名稱獲取顏色枚舉實例
    *
    * @return
    */

    public static Color getByName(String colorName) {
    return clorNameMap.get(colorName);
    }

    public String toString() {
    return name + "(" + id + ")";
    }
    }
    下面是UML示意圖:
    enum

    這里不是教大家獲取枚舉的一些編程技巧,那不是本意。只是想讓一些看到本文的人注意一下:枚舉可以承擔一些業務意義。

    posted on 2010-10-22 11:52 nieyong 閱讀(728) 評論(0)  編輯  收藏 所屬分類: Java

    公告

    所有文章皆為原創,若轉載請標明出處,謝謝~

    新浪微博,歡迎關注:

    導航

    <2010年10月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    統計

    常用鏈接

    留言簿(58)

    隨筆分類(130)

    隨筆檔案(151)

    個人收藏

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 在线a亚洲v天堂网2019无码| 国产在线观看免费观看不卡| 亚洲黄片毛片在线观看| 亚洲国产AV一区二区三区四区 | 亚洲中文字幕无码爆乳AV| 特级毛片aaaa级毛片免费| 思思99re66在线精品免费观看| 亚洲成综合人影院在院播放| 24小时日本电影免费看| 亚洲成aⅴ人片在线观| 免费观看的毛片大全| 亚洲国产视频久久| 麻豆精品国产免费观看| 亚洲熟妇久久精品| 在线免费不卡视频| 香蕉视频免费在线播放| 亚洲第一永久AV网站久久精品男人的天堂AV| 理论亚洲区美一区二区三区 | 成人毛片免费观看| 亚洲AV综合色区无码一二三区| 又爽又黄无遮挡高清免费视频 | 亚洲JLZZJLZZ少妇| www.91亚洲| 亚洲自偷自偷精品| 免费不卡视频一卡二卡| 日产久久强奸免费的看| 亚洲乱码精品久久久久..| 亚洲网站在线免费观看| 亚洲中文字幕久久无码| 亚洲第一黄色网址| 国产精品区免费视频| 亚洲二区在线视频| 久久国产精品萌白酱免费| 亚洲一级毛片在线播放| 国产免费观看青青草原网站| 国产特黄一级一片免费| 亚洲免费中文字幕| 亚洲色欲久久久久综合网| 国产成人精品免费视| 精品在线免费视频| 夜夜亚洲天天久久|