为什么我们应该使用枚举而不是Java常量?
我已经读过Java枚举提供了类型安全性。有人可以详细说明吗?或者使用枚举超过常量还有其他优点吗?
答案 0 :(得分:11)
引用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;
}
使用enum
(或任何类型,例如类或接口)为您提供类型安全性:类型系统确保您只能获得所需的类型。第二个例子在这方面不是类型安全的,因为你的方法可以将任何int作为参数,并且你不确定int值的含义。
使用enum是调用代码和被调用代码之间的契约,给定值是给定类型。
答案 1 :(得分:5)
你有动物ids的图片:
int DOG = 1;
int CAT = 2;
int COW = 3;
一个变量:
int animal;
只使用3个这些数字即可。但如果你弄错了,那么编译器可以为你检查,如果你写了
animal = 5;
你没有看到两个错误。枚举为您提供了更好的方法。
public enum Animal {
Dog,
Cat,
Cow
}
Animal animal = Animal.Dog;
现在你有类型安全。
答案 2 :(得分:1)
另一个未提及的区别是,枚举可以在其中包含逻辑,即可以使用ctor和方法。
答案 3 :(得分:0)
除了类型安全(已经提到)之外的一个原因是枚举有方法,这意味着大量使用常量的代码可以迁移到枚举类本身(动态或静态方法)。