【问题标题】:Number in parentheses after enum instance枚举实例后括号中的数字
【发布时间】:2017-03-16 11:52:35
【问题描述】:

我正在看一本关于编程的书,我遇到了这样的事情:

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;
}

枚举实例后括号中的数字是什么意思?是枚举构造函数吗?

【问题讨论】:

  • 是的,JANUARY(1) 基本上意味着正在调用构造函数Month( int index)。有关更多信息,您可以参考官方documentation、直接在课程上的 JavaDoc 或众多教程中的任何一个。

标签: java constructor enums


【解决方案1】:

枚举实例后括号中的数字是什么意思?是吗 枚举构造函数?

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;
    }
}

我要补充一点,枚举首先是一个类。所以每个枚举值(这里是JANUARYFEBRUARY,...)都将通过调用类构造函数来实例化。
对于任何类,由于您没有定义构造函数,编译器将生成一个没有参数的默认值。
所以它是有效的:

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  
}

【讨论】:

    【解决方案2】:

    这是每个枚举值调用的构造函数:

    Month(int index) {
    this.index = index;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-16
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-16
      • 2017-02-24
      相关资源
      最近更新 更多