我想宣布这个枚举:
public enum Month {
1, 2, 3, 4, 5 , 6, 7, 8, 9, 10, 11, 12;
}
但是当我尝试编译时它不起作用。这是因为常数是整数吗?
答案 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.