在枚举类型中使用整数

时间:2011-08-05 09:31:36

标签: java enums

我想宣布这个枚举:

public enum Month {
    1, 2, 3, 4, 5 , 6, 7, 8, 9, 10, 11, 12;
}

但是当我尝试编译时它不起作用。这是因为常数是整数吗?

4 个答案:

答案 0 :(得分:6)

是 - 枚举的值必须是有效的标识符。毕竟它们基本上是静态的 - 你有效地试图声明:

public static Month 1 = new Month();

显然无效。

有关详细信息,请参阅Java Language Specification section 8.9,但特别是此产品:

  

EnumConstant:
   注释 标识符 参数 opt ClassBody opt < / I>

答案 1 :(得分:2)

public enum Month {
  JANUARY(1),
  FEBRUARY(2),
  ...
  DECEMBER(12);

  private int number;

  private Month(int number) {
    this.number = number;
  }

  public int getNumber() {
    return number;
  }
}

答案 2 :(得分:1)

正如@Jon Skeet所说,你不可能在代码中使用整数作为标识符。您可以做的最接近的事情是将整数值与常量相关联:

public enum Month {
   ONE(1),
   TWO(2);

   private final int number;

   private Month(int number) {
     this.number = number;
   }

   public int getNumber() { return number; }
}

这样你就可以这样做:

Month.ONE.getNumber()

不确定这是否符合您的需求。

答案 3 :(得分:0)

你使用这种可怕的工作。

public enum Month {
    _1, _2, _3, _4, _5 , _6, _7, _8, _9, _10, _11, _12;
}

然而,另一种方法是使用name和ordinal()作为数字。

public enum Month {
    None, 
    January, February, March, April, May, June, 
    July, August, September, October, November, December
}

Month month = Month.January;
int num = month.ordinal(); // == 1
Month month2 = Month.values()[num]; // == January.