Enum和Constant Java类有什么区别?

时间:2014-07-17 19:47:43

标签: java enums

我对Enum感到困惑。

在哪里以及如何使用Enum

如果我使用Enum代替constant那么可能有什么好处?

有人可以向我解释一下吗?

3 个答案:

答案 0 :(得分:1)

主要优点是类型安全。使用一组常量,可以使用相同内在类型的任何值,从而引入错误。使用枚举时,只能使用适用的值。

答案 1 :(得分:1)

Enum类用于指定应用程序中经常使用的常量范围。

来自http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

  

只要需要表示一组固定的常量,就应该使用枚举类型。   常见示例包括罗盘方向(NORTH,SOUTH,EAST和WEST的值)和星期几。

一个常量类(假设这就是你所说的),实际上是为一个你不会改变的实体对象指定的。从技术上讲,Enum类是一个具有更多定义的常量类,但是Enum类的一个优点是some pre-defined functions,您必须在自己的常量类中定义它。但是,您还应该注意,对于小的单例示例,这可能是过度的。

此外,Enum类是类型安全的,而静态字段不是。现在可以编译时间错误检查,而不是常量类将发生的运行时潜在错误。这进一步提高了可读性,因为不存在常量列表的索引不可用的错误。在this post中,通过当前最佳答案对此进行了详细解释。

答案 2 :(得分:0)

从Java 8.0开始,关键字“常量”不存在。

如果你的意思是“const”: 这个关键字在Java中的已知关键字中(从开始到今天 - 8.0), 但它没有用,如果找到这个关键字,任何编译器都不应该编译。

枚举: 当您具有特定的逻辑值并且不想在String中处理它们时使用它们, 像:

public enum AcceptableColours {
    BLACK,
    WHITE,
    GREY
}

在开发时间内与枚举值匹配更安全

AcceptableColours currentColour = object.getColour;
if (currentColour == acceptableColours.BLACK) {
    // do something
} else if (currentColour == acceptableColours.WHITE) {
    // do something different
}

匹配字符串值

AcceptableColours currentColor = object.getColour;
if (currentColor.equals("black")) {
    // do something
} else if (currentColor.equals("white")) {
    // do something different
}

...想象一下巨大的应用程序,对枚举值有更多的变化(比如银行软件,保险软件......),它会更容易拼错一些字符串值, 和瞧,快乐的调试......