枚举构造函数接受的参数多于指定的参数

时间:2015-06-25 13:29:20

标签: java enums

我有以下代码,我试着了解它的作用

anyInt()

我的问题是:

  1. 什么是INSTANCE("没有")?
  2. ExampleClass只接受构造函数中的1个变量,为什么静态块ITEM内部接收3?

1 个答案:

答案 0 :(得分:2)

ExampleClassenumINSTANCEITEM是此ExampleClass的2个实例(称为enum constants)。例如,这将是有效的:

public enum ExampleClass {
  INSTANCE,
  ITEM;
}

也就是说,您可以为枚举定义自己的构造函数,如下所示:

private ExampleClass(String description) {
     this.description = description;
}

与使用类相同,如果定义自定义构造函数,JVM将不会创建默认构造函数。

  • INSTANCE("nothing")将使用您的自定义构造函数进行实例化。
  • ITEM无效,因为没有'no-arg'构造函数。

这是有效的:

public enum ExampleClass {
  INSTANCE("nothing"),
  ITEM;

  private String description;

  //Will be used to instantiate INSTANCE("nothing")
  private ExampleClass(String description) {
     this.description = description;
  }

  //Will be used to instantiate ITEM
  private ExampleClass() {
  }
}

new ExampleClass("ITEM", 1, "this is an item");更糟糕的是:您无法使用new实例化枚举。每个枚举文字只能存在一个实例,它们由JVM本身处理。即使有可能,也没有带有3个args的构造函数,所以它仍然无法编译