引用自http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html:
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY
}
当你有这个方法时:
public EnumTest(Day day) {
this.day = day;
}
你知道参数始终会是一天。
与此进行比较:
const int MONDAY = 1;
const int TUESDAY = 2;
const int CAT = 100;
const int DOG = 101;
你可以将 任何东西 传递给这个方法:
public EnumTest(int day) {
this.day = day;
}
使用枚举(或任何类型,例如类或接口)可以提供类型安全性:类型系统确保您只能获得所需的类型。第二个示例在这方面不是类型安全的,因为您的方法可以获取任何 int 作为参数,并且您不能确定 int 值的含义。
使用枚举是调用代码和被调用代码之间的合约,指定给定值是给定类型的值。
假设您有动物的ID:
int DOG = 1;
int CAT = 2;
int COW = 3;
还有一个变量:
int animal;
animal = 5;
你没有看到第二个错误。枚举提供了更好的方法。
public enum Animal {
Dog,
Cat,
Cow
}
Animal animal = Animal.Dog;
除了类型安全(已经提到)之外,枚举还具有方法,这意味着大量使用常量的代码可以迁移到枚举类本身(动态或静态方法)。