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

Java 枚举构造函数接受的参数多于指定的参数,java,enums,Java,Enums,我有下面的代码,我试图理解它的作用 public enum ExampleClass { INSTANCE("nothing"), ITEM; private String description; private ExampleClass(String description) { this.description = description; } static{ ITEM = new ExampleCl

我有下面的代码,我试图理解它的作用

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

    private String description;

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

    static{
         ITEM = new ExampleClass("ITEM", 1, "this is an item");
    }
}
我的问题是:

  • 什么是实例(“无”)
  • ExampleClass在构造函数中只接受1个变量,为什么在静态块项中接受3个
    ExampleClass
    是一个
    enum
    INSTANCE
    ITEM
    是此
    ExampleClass
    (调用)的两个实例。例如,这将是有效的:

    public enum ExampleClass {
      INSTANCE,
      ITEM;
    }
    
    也就是说,您可以为enum定义自己的构造函数,如下所示:

    private ExampleClass(String description) {
         this.description = description;
    }
    
    与类一样,如果定义自定义构造函数,JVM将不会创建默认构造函数

    • 实例(“无”)
      将使用自定义构造函数实例化
    • 无效,因为没有“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() {
      }
    }
    

    新示例类(“项目”,1,“这是一个项目”)
    甚至更糟:您不能用
    新的
    实例化枚举。每个枚举文本只能存在一个实例,它们由JVM本身处理。即使可能,也没有包含3个参数的构造函数,因此它仍然不会编译

    这将不会编译(这意味着第二点没有任何意义,因为我们无法重新分配枚举常量)OPs示例能够接近工作状态的唯一方法是,如果构造函数有一个varargs参数,则我没有编写代码。这是生产中的一段代码,我试图理解它。我也不明白它的工作原理,但它似乎是…无论如何,谢谢