【问题标题】:are java enums singleton? [duplicate]java枚举是单例吗? [复制]
【发布时间】:2018-06-03 06:04:52
【问题描述】:

java 枚举是单例的吗?

例如:

public enum State {

ACTIVE(0),
PENDING(1),
DELETED(2),
}


State s = State.ACTIVE;
State s2 = State.PENDING;
State s3 = State.PENDING;

每次我们使用 State.FOO 时 java 都会创建新实例吗??

【问题讨论】:

  • 您的枚举恰好有三个实例(ACTIVEPENDINGDELETED)(或者如果它是有效代码,则会出现)。它不会在您每次引用它时创建新实例。如果您的枚举中只有一个元素,而不是三个,那将是一个单例。
  • "因为每个枚举常量只有一个实例,所以在比较两个对象引用时允许使用 == 运算符代替 equals 方法,如果知道其中至少一个指一个枚举常量。” (JLS Sec 8.9.1)

标签: java design-patterns


【解决方案1】:

Java 中的枚举是具有自身多个常量实例的类。这些创建类似于static final 变量。访问枚举常量会返回对枚举常量的引用。它不会创建枚举常量的新实例。

【讨论】:

    猜你喜欢
    • 2013-06-14
    • 2013-12-21
    • 1970-01-01
    • 2013-03-13
    • 2013-07-23
    • 2011-12-15
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    相关资源
    最近更新 更多