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

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

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

    一個枚舉類型的基類for j2se 1.4

    Posted on 2006-04-26 22:09 iceboundrock 閱讀(912) 評論(0)  編輯  收藏 所屬分類: J2SE隨筆
    ?1 import ?java.util.HashMap;
    ?2
    ?3 /**
    ?4 ?*?枚舉類型的基類
    ?5 ?*? @author ?Richard?Lee
    ?6 ?*
    ?7 ? */

    ?8 public ? abstract ? class ?EnumBase? {
    ?9
    10 ???? ////////////////////////////////////////// /
    11 ???? // 成員變量
    12 ???? private ? final ?String?name;
    13 ???? private ? int ?value? = ? - 1 ;
    14
    15 ????
    16 ???? ////////////////////////////////////////// /
    17 ???? // 類靜態變量
    18 ???? private ? static ? final ?HashMap?valueCollection? = ? new ?HashMap();
    19 ???? private ? static ? final ?HashMap?nameCollection? = ? new ?HashMap();
    20 ????
    21 ???? ////////////////////////////////////////// /
    22 ???? // 類靜態方法
    23 ???? public ? static ?EnumBase?valueOf(Class?enumType?,? int ?value) {
    24 ???????? return ?(EnumBase)valueCollection.get(getEnumValueKey(enumType,?value));
    25 ????}

    26 ????
    27 ???? public ? static ?EnumBase?parse(Class?enumType?,?String?s) {
    28 ???????? return ?(EnumBase)nameCollection.get(getEnumNameKey(enumType?,?s));
    29 ????}

    30 ????
    31 ???? private ? static ?String?getEnumValueKey(Class?enumClass,? int ?value)? {
    32 ???????? return ?enumClass.getName()? + ? " , " ? + ?value;
    33 ????}

    34
    35 ???? private ? static ?String?getEnumNameKey(Class?enumType?,?String?name) {
    36 ???????? return ?enumType? + ? " , " ? + ?name;
    37 ????}

    38 ????
    39 ???? ////////////////////////////////////////// /
    40 ???? // 構造函數
    41 ???? protected ?EnumBase(String?name) {
    42 ????????checkName(name);
    43 ???????? this .name? = ?name;
    44 ????????nameCollection.put(getEnumNameKey(name)?,? this );
    45 ????}

    46 ????
    47 ???? protected ?EnumBase(String?name?,? int ?value) {
    48 ???????? this (name);
    49 ????????
    50 ????????checkValue(value);
    51 ???????? this .value? = ?value;
    52 ????????valueCollection.put(getEnumValueKey(value)?,? this );
    53 ????}

    54
    55 ????
    56 ???? ////////////////////////////////////////// /
    57 ???? // 成員函數
    58 ???? private ?String?getEnumNameKey(String?name)? {
    59 ???????? return ?getEnumNameKey( this .getClass()?,?name);
    60 ????}

    61
    62 ???? private ? void ?checkName(String?name)? {
    63 ???????? if ( null ? == ?name? || ? "" .equals(name)) {
    64 ???????????? throw ? new ?IllegalArgumentException( " Element?name?can?not?be?null?or?empty. " );
    65 ????????}

    66 ???????? if (nameCollection.containsKey(getEnumNameKey(name))) {
    67 ???????????? throw ? new ?IllegalStateException( " The?name?of?enum?element?already?exist. " );
    68 ????????}

    69 ????}

    70 ????
    71 ???? private ? void ?checkValue( int ?value)? {
    72 ???????? if (value? < ? 0 ) {
    73 ???????????? throw ? new ?IllegalArgumentException( " Element?value?must?not?less?than?0. " );
    74 ????????}

    75 ???????? if (valueCollection.containsKey(getEnumValueKey(value))) {
    76 ???????????? throw ? new ?IllegalStateException( " This?value?of?enum?element?already?exist. " );
    77 ????????}

    78 ????}

    79
    80 ???? private ?String?getEnumValueKey( int ?value)? {
    81 ???????? return ?getEnumValueKey( this .getClass()?,?value);
    82 ????}

    83
    84 ???? public ?String?toString()? {
    85 ???????? return ?name;
    86 ????}

    87 ????
    88 ???? public ? int ?getValue()? {
    89 ???????? if (value? > ? - 1 ) {
    90 ???????????? return ?value;
    91 ????????}
    else {
    92 ???????????? throw ? new ?IllegalStateException( " This?enum?class?has?no?value " );
    93 ????????}

    94 ????}

    95 }

    96

    使用范例:

    public ? class ?VaildEnum? extends ?EnumBase? {

    ?
    protected ?VaildEnum(String?name?,? int ?value)? {
    ??
    super (name?,?value);
    ?}

    ?
    ?
    public ? static ? final ?VaildEnum?Rule? = ? new ?VaildEnum( " Rule " ?,? 1 );
    ?
    public ? static ? final ?VaildEnum?OU? = ? new ?VaildEnum( " OU " ?,? 2 );
    }

    該枚舉基類對于j2sdk中常用的整型常量或者字符串型常量的優點:1.? 類型安全。2.性能提高(比字符串常量型)。3.在IDE中使用時會有提示,無需翻看SDK文檔。
    缺點:1.編寫略微麻煩。

    如果發現代碼中的bugs,歡迎您評論,非常感謝。


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    posts - 10, comments - 15, trackbacks - 0, articles - 0

    Copyright © iceboundrock

    主站蜘蛛池模板: 丁香花免费高清视频完整版| 免费精品一区二区三区第35| 国产免费AV片在线播放唯爱网| 久久综合日韩亚洲精品色| 一级特黄特色的免费大片视频| 情侣视频精品免费的国产| 亚洲午夜无码久久| 好男人视频在线观看免费看片| 亚洲六月丁香婷婷综合| 西西大胆无码视频免费| 亚洲一日韩欧美中文字幕在线| 在线播放免费播放av片| 亚洲国产成人无码AV在线| 热99re久久精品精品免费| 国产成人精品久久亚洲高清不卡| 国产精品免费看香蕉| 成年大片免费视频播放一级| 亚洲免费视频一区二区三区| 国产免费久久精品丫丫| 亚洲精品午夜无码专区| 久久久久久国产精品免费无码| 亚洲美免无码中文字幕在线| 在线永久看片免费的视频| 亚洲综合无码无在线观看 | 国产激情免费视频在线观看| 亚洲黄色中文字幕| 午夜一级免费视频| 日韩电影免费在线观看网址| 亚洲日韩精品射精日| 18禁止看的免费污网站| 亚洲偷自拍另类图片二区| 免费在线观看黄网| 久久精品视频免费看| 亚洲乱色伦图片区小说| 久久精品国产精品亚洲艾草网美妙| 久草视频在线免费看| 亚洲色最新高清av网站| 久久久久久a亚洲欧洲aⅴ| 免费看a级黄色片| 国内精品免费久久影院| 亚洲日韩精品国产3区|