程序员人生 网站导航

Java中的枚举值

栏目:php教程时间:2017-02-21 09:01:58

在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!

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐