<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 閱讀(722) 評論(0)  編輯  收藏 所屬分類: Java

    公告

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

    新浪微博,歡迎關注:

    導航

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

    統計

    常用鏈接

    留言簿(58)

    隨筆分類(130)

    隨筆檔案(151)

    個人收藏

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 欧美亚洲国产SUV| 亚洲AV人人澡人人爽人人夜夜| 久久久青草青青亚洲国产免观| 亚洲成A人片在线播放器| 啦啦啦完整版免费视频在线观看 | 蜜桃AV无码免费看永久| 久久精品国产亚洲7777| 久久综合亚洲色hezyo| 韩国日本好看电影免费看| 亚洲AV无码久久久久网站蜜桃| 最近中文字幕mv免费高清在线| 中文字幕亚洲综合精品一区| 色欲国产麻豆一精品一AV一免费| 亚洲av永久无码精品表情包| 久久国产乱子伦精品免费午夜| 亚洲AⅤ永久无码精品AA| 一个人免费观看视频在线中文| 亚洲永久无码3D动漫一区| 91视频免费网站| 亚洲白色白色在线播放| 成人免费a级毛片| 精品国产日韩亚洲一区在线| 亚洲成?v人片天堂网无码| 三级黄色在线免费观看| 亚洲第一二三四区| 亚洲av日韩av欧v在线天堂| a级毛片免费高清毛片视频| 亚洲精品中文字幕乱码影院| 好吊妞在线成人免费| 国产免费久久精品99久久| 亚洲视频网站在线观看| 亚洲Av无码国产情品久久| 久久九九AV免费精品| 国产精品亚洲精品爽爽| 亚洲精品无码不卡在线播HE| 啦啦啦中文在线观看电视剧免费版 | 一级特黄aaa大片免费看| 亚洲黄色在线观看视频| 亚洲精品国产综合久久一线| 在线视频免费观看爽爽爽| 九九视频高清视频免费观看|