5.9 枚举类型
在Java SE5中添加了一个看似很小的特性,即enum关键字,它使得我们在需要群组并使用枚举类型集时,可以很方便地处理。再次之前,你需要创建一个整型常量集,但是这些枚举值并不会必然地将其自身的取值限制在这个常量集的范围之内,因此它们显得更有风险且更难以使用。
枚举类型属于非常普遍的需求,C、C++和其他许多语言都已经拥有它了。在Java SE5之前,Java程序员在需要使用枚举类型时,必须了解很多细节并需要格外仔细,以正确地产生 enum的效果。现在Java也有了 enum,并且它的功能比C/C++的枚举类型要完备得多。
下面是一个简单的例子:
这里创建了一个名为 Spiciness的枚举类型,它具有 5个具名值。由于枚举类型的实例是常量,因此按照命名惯例他们都用大写字母表示(如果在一个名字中有多个单词,用下划线将它们隔开)。
为了使用enum,需要创建一个该类型的引用,将其赋值给某个实例:
尽管enum 看起来像是一种新的数据类型,但是这个关键字只是 enum生成对应的类时,产生了某些编译器行为,因此在很大程度上,你可以将enum当做其他任何类来处理。事实上,enum确实是类,并且具有自己的方法。
事实上,enum确实是类,并且具有自己的方法。
enum有一个特别实用的特性,即它可以在switch语句内实用:
由于 switch 是要在有限的可能值集合中进行选择,因此它与enum正式绝佳的组合。请注意enum的名字是如何能够倍加清楚地表明程序意欲何为的。
大体上,你可以将enum用作另外一种创建数据类型的方式,然后直接讲所得到的类型拿来使用。这正是关键所在,因此你不必过多地考虑它们。在JavaSE5 引用enum之前,你必须花费大量的精力去保证与其等价的枚举类型是安全可用的。