10

我知道我可以像这样创建一个枚举:

public enum MyEnum {
   ONE(1),
   TWO(2);
   private int value;
   private MyEnum(int value) {
      this.value = value);
   }
   public int getValue() {
      return value;
   }
}

但我有一些问题:

1)似乎枚举值是在开始时声明的。是否有特定的格式。我可以在任何地方声明它们吗?

2) 是否可以声明一个具有多个构造函数的枚举,这是人们有时会做的事情吗?

4

3 回答 3

11
public enum MyEnum {
   ONE(1),
   TWO(1, 2);
   private int value1, value2;

   private MyEnum(int value) {
      this.value1 = value;
      this.value2 = 0; // default
      // this.value2 = getFromSomewhereElse(); // get it at runtime
   }

   private MyEnum(int value1, int value2) {
      this.value1 = value1;
      this.value2 = value2;
   }

   public int getValue1() {
      return this.value1;
   }

   public int getValue2() {
      return this.value2;
   }
}
  1. 是的,您必须在开始时声明枚举值。总是。
  2. 请参见上面的代码。有可能的。如果人们这样做,这取决于应用程序。如果你有很多字段并且大部分应该是默认值,那么使用多个构造函数是一件好事。此外,可以在运行时(从文件或另一个静态类)读取字段的值。
于 2012-06-14T16:33:18.183 回答
8
  1. 是的,它们必须在枚举类的其他字段之前声明。
  2. 是的,它们可以有多个构造函数。

你自己试试就可以发现的。

于 2012-06-14T16:28:33.407 回答
4
  1. 根据JLS 7,常数先行。

  2. “枚举声明中的任何构造函数或成员声明都适用于枚举类型,就好像它们已经存在于普通类声明的类主体中一样,除非另有明确说明。” 和“如果枚举类型的构造函数声明是公共的或受保护的,这是一个编译时错误。” (同上,8.9.2)

于 2012-06-14T16:30:47.650 回答