由于枚举类型的实例是常量,因此按照命名惯例都用大写字母表示(如果一个名字中有多个单词,用下划线隔开)。
public enum Spiciness {
NOT, MILD, MEDIUM, HOT, FLAMING
}
为了使用enum,需要创建一个该类型的引用,并将其赋值给某个实例:
public class SimpleEnumUse {
public static void main(String[] args) {
Spiciness howHot = Spiciness.HOT;
System.out.println(howHot);
}
}
运行结果:
HOT
当创建enum时,编译器会自动添加一些特性。例如会创建toString()方法,便于显示某个enum实例的名字,还会创建ordinal()方法,用来表示某个特定enum常量的声明顺序,以及static values()方法,用来按照enum常量的声明顺序,产生由这些常量 值构成的数组。
class EnumOrder {
public static void main(String[] args) {
for (SimpleEnumUse.Spiciness s : SimpleEnumUse.Spiciness.values()) {
System.out.println(s + ",ordinal" + s.ordinal());
}
}
}
运行结果:
NOT,ordinal:0
MILD,ordinal:1
MEDIUM,ordinal:2
HOT,ordinal:3
FLAMING,ordinal:4
enum看起来像一个新的数据类型,但是enum是一个类,可以有自己的方法。
enum有一个很实用的特性,即它可以在switch语句内使用
class SwitchTest {
SimpleEnumUse.Spiciness degree;
public SwitchTest(SimpleEnumUse.Spiciness degree) {
this.degree = degree;
}
public void describe() {
System.out.println("This degree is ");
switch (degree) {
case NOT:
System.out.println("not");
break;
case MILD:
case MEDIUM:
System.out.println("medium");
break;
case HOT:
case FLAMING:
default:
System.out.println("hot");
}
}
public static void main(String[] args) {
SwitchTest not, medium, hot;
not = new SwitchTest(SimpleEnumUse.Spiciness.NOT);
medium = new SwitchTest(SimpleEnumUse.Spiciness.MEDIUM);
hot = new SwitchTest(SimpleEnumUse.Spiciness.HOT);
not.describe();
medium.describe();
hot.describe();
}
}
运行结果:
This degree is
not
This degree is
medium
This degree is
hot
由于switch是要在有限的可能值集合中进行选择,因此它和enum很适合组合使用
网友评论