我正在读一本关于编程的书,我遇到了这样的事情:
public static enum Month {
JANUARY(1),
FEBRUARY(2),
MARCH(3),
APRIL(4),
MAY(5),
JUNE(6),
JULY(7),
AUGUST(8),
SEPTEMBER(9),
OCTOBER(10),
NOVEMBER(11),
DECEMBER(12);
Month(int index) {
this.index = index;
}
枚举实例后,括号中的数字是什么意思?它是枚举构造函数吗?
答案 0 :(得分:5)
这是每个枚举值调用的构造函数:
Month(int index) {
this.index = index;
}
答案 1 :(得分:5)
枚举实例后,括号中的数字是什么意思?是吗 枚举构造函数?
JANUARY(1)
,FEBRUARY(2)
等......确实是枚举构造函数。
但是在枚举中指定构造函数不需要数字。在这里你有一个数字,但它可以是任何其他的,它也可以有所需的参数。
请注意,实际上枚举声明错过了index
字段,无法编译
这是正确的:
public static enum Month {
JANUARY(1),
FEBRUARY(2),
MARCH(3),
APRIL(4),
MAY(5),
JUNE(6),
JULY(7),
AUGUST(8),
SEPTEMBER(9),
OCTOBER(10),
NOVEMBER(11),
DECEMBER(12);
private int index;
Month(int index) {
this.index = index;
}
}
我想补充说,枚举最重要的是一个类。因此,每个枚举值(此处为JANUARY
,FEBRUARY
,...)都将通过调用类构造函数进行实例化。
对于任何类,由于您没有定义构造函数,编译器将生成一个没有arg的默认值
所以这是有效的:
public static enum Fruit {
APPLE(),
ORANGE();
Fruit() {
}
}
这也是有效的:
public static enum Fruit {
APPLE(),
ORANGE();
}
但是对于构造函数中没有arg的枚举,我们通常使用为枚举保留的这种方便的语法:
public static enum Fruit {
APPLE, // with no parenthesis
ORANGE; // with no parenthesis
}