我有以下枚举:
public enum Months {
JAN(31),
FEB(28),
MAR(31),
APR(30),
MAY(31),
JUN(30),
JUL(31),
AUG(31),
SEP(30),
OCT(31),
NOV(30),
DEC(31);
private final byte DAYS; //days in the month
private Months(byte numberOfDays){
this.DAYS = numberOfDays;
}//end constructor
public byte getDays(){
return this.Days;
}//end method getDays
}//end enum Months
它给出了一个错误,指出“构造函数Months(int)未定义”虽然我传递了一个有效的字节参数。 我做错了什么?
答案 0 :(得分:9)
最简单的解决方案是接受int
值
private Months(int numberOfDays){
this.DAYS = (byte) numberOfDays;
}
BTW非静态字段应位于camelCase
而不是UPPER_CASE
FEB在某些年份也有29天。
public static boolean isLeapYear(int year) {
// assume Gregorian calendar for all time
return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
}
public int getDays(int year) {
return days + (this == FEB && isLeapYear(year) ? 1 : 0);
}
答案 1 :(得分:7)
这些数字是int
文字。您必须将它们转换为byte
:
JAN((byte)31),
答案 2 :(得分:1)
Java Language Specification关于词汇整数文字说明如下:
文字的类型确定如下:
- 以L或l结尾的整数文字(§3.10.1)的类型很长(§4.2.1)。
- 任何其他整数文字的类型是int(§4.2.1)。
因此它要求您显式地将此整数文字转换为byte。