常量上的Java枚举

常量上的Java枚举,java,Java,可能重复: 为什么我们应该使用枚举而不是Java常量 我已经读到Java枚举提供了类型安全性。有人能详细说明一下吗?或者使用枚举优于常量还有其他好处吗?引用: 使用此方法时: public EnumTest(Day day) { this.day = day; } public EnumTest(int day) { this.day = day; } 你知道争论总是会持续一天 与此相比: const int MONDAY = 1; const int TUESDAY =

可能重复:

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

我已经读到Java枚举提供了类型安全性。有人能详细说明一下吗?或者使用枚举优于常量还有其他好处吗?

引用:

使用此方法时:

public EnumTest(Day day) {
    this.day = day;
}
public EnumTest(int day) {
    this.day = day;
}
你知道争论总是会持续一天

与此相比:

const int MONDAY = 1;
const int TUESDAY = 2;

const int CAT = 100;
const int DOG = 101;
您可以将任何内容传递到此方法:

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


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

图像您有动物ID:

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和方法