Java中的枚举值
2012-03-19 20:44
127 查看
在C++时代就有了枚举值这个类型,它是一种有序键值对的集合,使用枚举类型可以在语义化和结构化之间达成一种平衡。如果我们的代码中到处都是需要文档才能看懂的数字或字符(串)定义的话,那将是一种非常痛苦的事情。老陈最近在学习Java,在对项目重构的时候,就需要枚举类型来优化代码结构,给力的是,Java和.NET等语言(环境)一样都提供了对枚举类型的直接支持!但是,我却遇到了一个比较苦恼的问题……
在C++/C#/Java中,我们要定义一个简单的枚举值,格式如下:
而当我需要给每个枚举值成员绑定一个特定常量的时候,Java就显得很不给力了,而且差异非常大。
绑定常量的C++/C#枚举值定义如下:
绑定常量的Java枚举值定义如下:
看到这里,.NET猴子们是不是显露出某种狞笑和各种鄙视的眼眸?
相信您可能已经体会到,Java枚举类型的成员要绑定常量的话,其语法非常繁琐,上述举例的代码还是非常简单的实现,而且从语法上讲,也有很变态的地方。
然而,我们看待问题不能只看一面,我们应该考虑考虑,Java这么搞肯定是由它的原因的。至少,如下的代码在C++/C#中要实现起来就不是那么容易了。
看到这里,Java猴子们笑而不语!.NET猴子各种羡慕嫉妒恨!
当然,在.NET里面,同样的功能是可以通过Attitude特性来实现的(具体的这里就不再描述了,未来的博文中我将单独讨论这个问题),而且也符合常规的语法规范,不像Java特意安排出这么变态的语法格式。
各种编程语言本质上都是人类的某种工具而已,Java如此做法其实也在一定的程度上优化了编码体验,不是么?只不过,我倒是希望各种语言能够相互学习,不要总是引起各种阵营的猴子相互打架,打架能解决问题么?
老陈是Java初学者,希望各路神仙不吝赐教!
在C++/C#/Java中,我们要定义一个简单的枚举值,格式如下:
// C++ // 请留意这里的“;”号。 enum Colors { Red, Green, Blue };
// C# // 和C++的语法基本一致 enum Colors { Red, Green, Blue }
// Java // 看上去跟C#没区别 enum Colors { Red, Green, Blue }
而当我需要给每个枚举值成员绑定一个特定常量的时候,Java就显得很不给力了,而且差异非常大。
绑定常量的C++/C#枚举值定义如下:
// C++ enum Colors { Red = 1, Green = 2, Blue = 3 };
// C# enum Colors { Red = 1, Green = 2, Blue = 3 }
绑定常量的Java枚举值定义如下:
// Java // 看起来繁琐很多了哦,好不给力啊! public enum Colors { Red(1), Green(2), Blue(3); private int _value; private Colors(int value) { _value = value; } public int value() { return _value; } }
看到这里,.NET猴子们是不是显露出某种狞笑和各种鄙视的眼眸?
相信您可能已经体会到,Java枚举类型的成员要绑定常量的话,其语法非常繁琐,上述举例的代码还是非常简单的实现,而且从语法上讲,也有很变态的地方。
然而,我们看待问题不能只看一面,我们应该考虑考虑,Java这么搞肯定是由它的原因的。至少,如下的代码在C++/C#中要实现起来就不是那么容易了。
// Java // 老陈曰:江山如此多娇,Java独领风骚! public enum Colors { Red(1, "红色"), Green(2, "绿色"), Blue(3, "蓝色"); private int _value; private String _name; private Colors(int value, String name) { _value = value; _name = name; } public int value() { return _value; } public String getName() { return _name; } }
看到这里,Java猴子们笑而不语!.NET猴子各种羡慕嫉妒恨!
当然,在.NET里面,同样的功能是可以通过Attitude特性来实现的(具体的这里就不再描述了,未来的博文中我将单独讨论这个问题),而且也符合常规的语法规范,不像Java特意安排出这么变态的语法格式。
各种编程语言本质上都是人类的某种工具而已,Java如此做法其实也在一定的程度上优化了编码体验,不是么?只不过,我倒是希望各种语言能够相互学习,不要总是引起各种阵营的猴子相互打架,打架能解决问题么?
老陈是Java初学者,希望各路神仙不吝赐教!
相关文章推荐
- Ibatise 使用TypeHandler将数据库中的值与java的枚举值之间转换
- Java 中switch case 枚举值使用报错:case expressions must be constant expressions
- java_枚举类枚举值
- Java中的枚举值
- Java 枚举值的用法
- Java中的枚举值
- Java进阶知识点1:白捡的扩展性 - 枚举值也是对象
- JAVA中枚举值,提供getName函数,获取中文含义
- Java中的枚举值
- java学习笔记(二):枚举值
- Java的枚举值能不能用==比较?
- JavaWeb——Day20_1
- java中常用到得设计模式共有23种
- Java解析JSON格式数据二
- Java-Web:HTML-1-01-12-2014
- JAVA常用字符串工具类
- java基础之 枚举
- JAVA实体XML相互转换
- Java-Collections Framework学习与总结-ArrayDeque
- java 集合2