Java枚举超过常量
可能重复:
了解Java中的枚举
我们为什么要使用枚举而不是Java常量?
我已经读过Java枚举提供了类型安全性。 有人可以详细说明吗? 或者使用枚举超过常量还有其他优点吗?
引用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值的含义。
使用枚举是调用代码和被调用代码之间的契约,给定值是给定类型。
你有动物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;
现在你有类型安全。
另一个尚未提及的区别是,枚举可以在其中具有逻辑,即可以具有ctor和方法。
除了类型安全(已经提到)之外的一个原因是枚举有方法,意味着大量使用常量的代码可以迁移到枚举类本身(动态或静态方法)。