本文转载自:http://blog.csdn.net/qq_27093465/article/details/51706076 作者:李学凯
什么时候想用枚举类型:
有时候,在设计一个java model对象的时候,你需要一些具体的常量字符串之类的东西,这个东西又没必要跟整个项目的全局常量放在一起,就放在model的java文件里面是最合适的,那么,你可以有两种选择:
1,在java model文件里面,定义public final static XXXX = "" ;
这种就是全局静态变量,通过类名就可以直接访问。
2,还是在java model 文件里面,定义个枚举类型 public enum XXXX{a,b,c,d,e,f};
什么时候,如何使用:
当在和前台传过来的数据或者在逻辑操作的代码里面需要去用到这个常量值去做比较的时候,就是使用枚举类型的时候。
一般形式是: 类名.枚举类型名.单个枚举类型
用上面的例子(假设在一个叫A的model java文件里面),
则为A.XXXX.a.toString();
就可以这么使用了。
为什么要这么设计常量:
这里有个代码的书写原则,这东西一般是没人,而且书里面也是没人跟你说的,都是代码看多了,或者,在你犯错误的时候才知道的问题。
就是在自己的代码里面,要是想使代码很规范,不被吊打,
那么写出来的逻辑代码里面是不应该出现常量字符串和常量数字之类的东西。
例如代码里面出现数字:100,8,
或者其他的数字,
字符串如:只要是在逻辑代码里面带引号的。
这些代码,你写出来虽然在功能上是没有问题的,但是,这些都是隐藏的炸弹。
好的代码,是不会出现这个问题的。这些东西都应该被定义成一个常量,然后再在其他地方使用。
类似c语言里面的宏定义的感觉。
不然在很久之后,忽然有些地方的值换了,只需要修改一处地方,整个项目都不用担心会出问题,
但是,如果你没有这么干,那么,没人知道你在逻辑代码里面还有这样的常量存在。
那么代码就会出现美妙的后果。
然后就炸了。
怎么循环一个枚举类型。
枚举有一个方法,values(),
使用形式如: int length = XXXX.values().length
返回的是一个类型与枚举类型一致的数组。
然后就可以循环这个数组。
就是循环枚举类型了。
public enum EnumTest { MON, TUE, WED, THU, FRI, SAT, SUN; } //循环输出 值 for (EnumTest e : EnumTest.values()) { System.out.println(e.toString()); }
.ordinal()方法。
这个方法就是从枚举类型的第一个枚举开始,依次从零开始往上递增。
上面的例子中a,b,c,d,e,f,依次对应 为数字 ,0,1,2,3,4,5
形式:A.XXXX.a.ordinal();
这么个方式调用。
创建枚举类型要使用 enum 关键字,
隐含了所创建的类型都是
java.lang.Enum
类的子类(java.lang.Enum 是一个抽象类)
其中的方法和属性如下图:
enum 对象的常用方法介绍
int compareTo(E o)
比较此枚举与指定对象的顺序。
Class<E> getDeclaringClass()
返回与此枚举常量的枚举类型相对应的 Class 对象。
String name()
返回此枚举常量的名称,在其枚举声明中对其进行声明。
int ordinal()
返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
String toString()
返回枚举常量的名称,它包含在声明中。
static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)
返回带指定名称的指定枚举类型的枚举常量。