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

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

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

    聶永的博客

    記錄工作/學(xué)習(xí)的點(diǎn)點(diǎn)滴滴。

    枚舉:不用那么單調(diào),可以承擔(dān)一些業(yè)務(wù)意義

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

    private String name;
    private int id;

    /**
    * 必須的,使用一個(gè)構(gòu)造函數(shù)用以初始化枚舉常量
    * @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;
    }
    }
    枚舉是一個(gè)class變體,類似于 RED("red",1) 可以看做是定了一個(gè)初始化Color的一個(gè)實(shí)例,其構(gòu)造方法簽名具有兩個(gè)參數(shù)需要傳入。
    現(xiàn)在的調(diào)用方式:
    Color.RED.getName(), Color.RED.getId()

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

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

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

    要想提供一個(gè)隨機(jī)的顏色值,那就是靜態(tài)的,不是一個(gè)具體顏色的本身屬性。枚舉都是具有values屬性,返回一個(gè)數(shù)組。使用方法為 
    Color color = Color.random();
    //一些屬性的獲取等操作
    有時(shí),我們需要傳入一個(gè)顏色值字符串獲得對應(yīng)的枚舉值:
     /**
    * 構(gòu)造一個(gè)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);
    }
    }

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

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




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

    /**
    * 枚舉可以承擔(dān)一些業(yè)務(wù)意義
    *
    * @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;

    /**
    * 必須的,使用一個(gè)構(gòu)造函數(shù)用以初始化枚舉常量
    *
    * @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);

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

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

    /**
    * 構(gòu)造一個(gè)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);
    }
    }

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

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

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

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

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

    公告

    所有文章皆為原創(chuàng),若轉(zhuǎn)載請標(biāo)明出處,謝謝~

    新浪微博,歡迎關(guān)注:

    導(dǎo)航

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

    統(tǒng)計(jì)

    常用鏈接

    留言簿(58)

    隨筆分類(130)

    隨筆檔案(151)

    個(gè)人收藏

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲高清一区二区三区| 黄视频在线观看免费| 亚洲国产成人久久一区WWW| 黄色网址免费在线观看| 亚洲人成www在线播放| 中文字幕在亚洲第一在线| 国产91免费在线观看| 成人久久久观看免费毛片| 78成人精品电影在线播放日韩精品电影一区亚洲 | 国内精品99亚洲免费高清| 亚洲人成片在线观看| 亚洲日韩中文字幕在线播放| 成人免费无码视频在线网站| 中国内地毛片免费高清| 久久国产亚洲精品| 亚洲国产a∨无码中文777 | 亚洲最新视频在线观看| 免费国产精品视频| 114一级毛片免费| 亚洲免费日韩无码系列| 亚洲一区二区三区丝袜| 老司机亚洲精品影院无码| 亚洲美女在线国产| 免费看美女让人桶尿口| 最近中文字幕mv免费高清在线| 日韩一区二区三区免费播放| 国产精品亚洲精品观看不卡| 亚洲av无码乱码国产精品fc2| 国产一级淫片视频免费看| 成年免费大片黄在线观看岛国 | 中文在线免费视频| 色偷偷亚洲男人天堂| 2019亚洲午夜无码天堂| 91亚洲精品视频| 亚洲成AV人片在| 在线亚洲精品福利网址导航| 免费看国产一级片| 国产高清在线免费视频| 成年女人18级毛片毛片免费| 久久九九兔免费精品6| 精品一区二区三区无码免费视频|