这是Java SE5中添加的一个新特性,enum关键字
表示以前编写代码的时候从来没有用过。。。但感觉这东西应该挺方便的,比如需要创建一个常量集的时候,看一个书上的例子
public class Test {
public static void main(String[] args) {
for(Spiciness s : Spiciness.values())
{
System.out.println(s + ", ordinal " + s.ordinal());
}
}
}
enum Spiciness
{
NOT, MILD, MEDIUM, HOT,FLAMING
}
输出结果为
NOT, ordinal 0
MILD, ordinal 1
MEDIUM, ordinal 2
HOT, ordinal 3
FLAMING, ordinal 4
这里面的
Spiciness就是一个常量的集合,很像一个数组
Spiciness.values()返回的就是一个组数,
s.ordinal()表示其中的位置,类似数组下标也是从0开始。如果一定要用下标取值的话就用
Spiciness.values()[1]类似这样来用,不过有点多余
尽管enum看起来像是一种新的数据类型,但是这个关键字只是为enum生成对应的类时,产生某些编译器行为,因此在很大程度上,可以将enum当做其他任何数据类型来处理。事实上enum确实是类,并且有自己的方法。
下面这个例子比较有意思,enum可以在switch语句内使用
public class Test {
public static void main(String[] args) {
describe(Spiciness.HOT);
}
public static void describe(Spiciness s)
{
int index = 0;
switch (s) {
case NOT:
break;
case MILD:
index = 1;
break;
case MEDIUM:
index = 2;
break;
case HOT:
index = 3;
break;
case FLAMING:
index = 4;
break;
default:
index = 5;
break;
}
System.out.println("index: " + index);
System.out.println(Spiciness.values()[index]);
}
}
enum Spiciness
{
NOT, MILD, MEDIUM, HOT,FLAMING
}
输出结果为
index: 3
HOT
由于
switch是要在有限的可能值集合中进行选择,因此它与
enum是绝佳的组合。