Java枚举构造函数被多次调用

时间:2014-06-28 19:41:35

标签: java enums

我看到如下的枚举用法。

public enum MyEnum {
  ENUM1(1),
  ENUM2(2),
  ENUM3(3);

  private int enumValue;
  MyEnum(int i) { this.enumValue = i; }
  public int getEnum() { return this.enumValue; }
}

// this is the call
MyEnum.ENUM1.getEnum()

当进行上述调用时,MyEnum的构造函数被调用三次。我想要的只是一个值,但创建了三个实例!这不是一件坏事,还是我做错了什么?

编辑:据我所知,当第二次调用MyEnum.ENUM3.getEnum()时,不再创建新实例。

2 个答案:

答案 0 :(得分:3)

你有三个枚举常量

ENUM1(1),
ENUM2(2),
ENUM3(3);

对于每个常量,需要调用构造函数。这是正常行为。

当加载和初始化枚举类时,常量都被初始化。

答案 1 :(得分:1)

创建三个实例ENUM1,ENUM2和ENUM3--由于在加载类时声明了MyEnum。您的调用只是检索与ENUM1关联的int。

这是定义Java枚举的方式。你无法改变它。