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》
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》
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.