在C++時期就有了枚舉值這個類型,它是1種有序鍵值對的集合,使用枚舉類型可以在語義化和結構化之間達成1種平衡。如果我們的代碼中到處都是需要文檔才能看懂的數字或字符(串)定義的話,那將是1種非常痛苦的事情。老陳最近在學習Java,在對項目重構的時候,就需要枚舉類型來優化代碼結構,給力的是,Java和.NET等語言(環境)1樣都提供了對枚舉類型的直接支持!但是,我卻遇到了1個比較苦惱的問題……
在C++/C#/Java中,我們要定義1個簡單的枚舉值,格式以下:
1 // C++
2 // 請留意這里的“;”號。
3 enum Colors
4 {
5 Red,
6 Green,
7 Blue
8 };
1 // C#
2 // 和C++的語法基本1致
3 enum Colors
4 {
5 Red,
6 Green,
7 Blue
8 }
1 // Java
2 // 看上去跟C#沒區分
3 enum Colors
4 {
5 Red,
6 Green,
7 Blue
8 }
而當我需要給每一個枚舉值成員綁定1個特定常量的時候,Java就顯得很不給力了,而且差異非常大。
綁定常量的C++/C#枚舉值定義以下:
1 // C++
2 enum Colors
3 {
4 Red = 1,
5 Green = 2,
6 Blue = 3
7 };
1 // C#
2 enum Colors
3 {
4 Red = 1,
5 Green = 2,
6 Blue = 3
7 }
綁定常量的Java枚舉值定義以下:
1 // Java
2 // 看起來繁瑣很多了哦,好不給力啊!
3 public enum Colors
4 {
5 Red(1), Green(2), Blue(3);
6
7 private int _value;
8
9 private Colors(int value)
10 {
11 _value = value;
12 }
13
14 public int value()
15 {
16 return _value;
17 }
18 }
看到這里,.NET猴子們是否是顯現出某種獰笑和各種鄙視的眼眸?
相信您可能已體會到,Java枚舉類型的成員要綁定常量的話,其語法非常繁瑣,上述舉例的代碼還是非常簡單的實現,而且從語法上講,也有很變態的地方。
但是,我們看待問題不能只看1面,我們應當斟酌斟酌,Java這么弄肯定是由它的緣由的。最少,以下的代碼在C++/C#中要實現起來就不是那末容易了。
1 // Java
2 // 老陳曰:江山如此多嬌,Java獨領風騷!
3 public enum Colors
4 {
5 Red(1, "紅色"), Green(2, "綠色"), Blue(3, "藍色");
6
7 private int _value;
8 private String _name;
9
10 private Colors(int value, String name)
11 {
12 _value = value;
13 _name = name;
14 }
15
16 public int value()
17 {
18 return _value;
19 }
20
21 public String getName()
22 {
23 return _name;
24 }
25 }
看到這里,Java猴子們笑而不語!.NET猴子各種羨慕妒忌恨!
固然,在.NET里面,一樣的功能是可以通過Attitude特性來實現的(具體的這里就不再描寫了,未來的博文中我將單獨討論這個問題),而且也符合常規的語法規范,不像Java特地安排出這么變態的語法格式。
各種編程語言本質上都是人類的某種工具而已,Java如此做法其實也在1定的程度上優化了編碼體驗,不是么?只不過,我倒是希望各種語言能夠相互學習,不要總是引發各種陣營的猴子相互打架,打架能解決問題么?
學習Java的同學注意了!!!
學習進程中遇到甚么問題或想獲得學習資源的話,歡迎加入Java學習交換群,群號碼:183993990 我們1起學Java!
下一篇 Android--雪花飄動特效