为什么字节参数不被识别为整数?

时间:2013-08-16 08:01:57

标签: java constructor enums arguments byte

我有以下枚举:

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)未定义”虽然我传递了一个有效的字节参数。 我做错了什么?

3 个答案:

答案 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。