Java中實現C++中的enum

以下是我開通的JAVA論壇,歡迎光臨^_^
http://groups.google.com/group/roofalison/browse_thread/thread/ecd6ca274fdcab8e

感謝Nubix提醒我,原來Java已經有enum了,可能我手頭的書和編譯器是基於1.4的,沒有看到,呵呵,不過下面的東西看看無妨。
C++裏的enum有兩個特性:
1、靜態、常量特性。
2、類型檢查。
對於第一個,即是一旦定義了enum,內部數據將不可被修改,且也定義了存儲空間,這在Java裏當然是很容易實現的。
現在以“星期”類型爲例:
對C++而言,可以這麼定義:
enum Week {
  MON = 1,
  WED = 2,
  TUE = 3,
  THU = 4,
  FRI = 5,
  SAT = 6,
  SUN = 7
};
如果在Java中只實現enum第一個特性,那麼可以用接口實現:
public interface Week {
    int MON = 1,
        WED = 2,
        TUE = 3,
        THU = 4,
        FRI = 5,
        SAT = 6,
        SUN = 7;
}
由於接口使得內部數據默認強制爲public static final類型,所以第一個特性可以輕易實現,但它不能實現第二個特性 --- 對於enum來說,賦值操作只能針對同一個類型,但對於Java的接口實現,由於內部成員類型爲int,那麼毫無疑問我們可以寫int s = Week.MON + Week.WED; 這樣的操作,這不是合理的權限,所以我們必須對此做出限制。
以下做法更好的實現了類型檢查,防止了Week類型有不必要的權限,以此獲得實現C++中enum的效果:
// 使Week爲final類型,這樣它就不可繼承
public final class Week {
    public static void main(String[] args) {
        Week day = Week.MON;
        day = Week.FRI;
    }
   
    public String toString() {
        return _name;
    }
    //
    public final static Week MON = new Week("Monday");
    public final static Week TUE = new Week("Tuesday");
    public final static Week WED = new Week("Wednesday");
    public final static Week THU = new Week("Thusday");
    public final static Week FRI = new Week("Friday");
    public final static Week SAT = new Week("Saturday");
    public final static Week SUN = new Week("Sunday");
    // 將構造方法修飾爲private,這樣用戶不能任意new自己想要的Week,所以Week的成員限定爲以上有限的七個
    private Week(String aName) {
        _name = aName;
    }
    private String _name;
}
參考自:《thinking in java》
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章