繁体   English   中英

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

[英]Enum constructor takes in more parameters than specified

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

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

我的问题是:

  1. 什么是 INSTANCE("nothing") ?
  2. ExampleClass 在构造函数中只接受 1 个变量,为什么在静态块 ITEM 中接受 3 个变量?

ExampleClass是一个enum INSTANCEITEM是此ExampleClass 2 个实例(称为枚举常量)。 例如,这将是有效的:

public enum ExampleClass {
  INSTANCE,
  ITEM;
}

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

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

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

  • INSTANCE("nothing")将使用您的自定义构造函数实例化。
  • ITEM无效,因为没有“无参数”构造函数。

这将是有效的:

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 个参数的构造函数,因此它仍然无法编译

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM