Java枚举与常量的比较

5

可能是重复问题:
理解 Java 中的枚举

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

我读到过 Java 的枚举提供类型安全。请有人详细说明一下吗?或者使用枚举的其他优点吗?

4个回答

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;
}

使用枚举(或任何类型,例如类或接口)可以提供类型安全性:类型系统确保您只能获得所需的类型。第二个示例在这方面不是类型安全的,因为您的方法可以获取任何 int 作为参数,并且您不能确定 int 值的含义。

使用枚举是调用代码和被调用代码之间的合约,指定给定值是给定类型的值。


5

假设您有动物的ID:

int DOG = 1;

int CAT = 2;

int COW = 3;

还有一个变量:

int animal;

只使用这三个数字进行操作是可以的。但如果您出现错误,编译器会为您检查,并告知您出错的地方。如果您写成 "

",请注意这可能会影响HTML标签的正确性。
animal = 5;

你没有看到第二个错误。枚举提供了更好的方法。

public enum Animal {

  Dog,

  Cat,

  Cow

}

Animal animal = Animal.Dog;

现在您拥有类型安全性。

1
另一个未提及的不同之处在于枚举可以在其内部具有逻辑,即可以具有构造函数和方法。

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接