Java枚举常量

时间:2012-01-16 19:07:35

标签: java

  

可能重复:
  Understanding Enums in Java

为什么我们应该使用枚举而不是Java常量?

我已经读过Java枚举提供了类型安全性。有人可以详细说明吗?或者使用枚举超过常量还有其他优点吗?

4 个答案:

答案 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)

除了类型安全(已经提到)之外的一个原因是枚举有方法,这意味着大量使用常量的代码可以迁移到枚举类本身(动态或静态方法)。

相关问题