【问题标题】:Constructor Enum error构造函数枚举错误
【发布时间】:2017-05-19 17:15:52
【问题描述】:
public enum ProductCategory {
  FOOD, BEVERAGE, DEFAULT;

private final String label;

private ProductCategory(String label){
this.label = label;
}

public String getLabel(){
        return label;
}

我想在这个枚举类中实现方法 getLabel(),但我遇到错误:“构造函数 ProductCategory() 未定义”。

我已经有了我需要的构造函数,我还需要写什么?我试图编写默认构造函数,但我再次遇到错误。

附:我是java的初学者。

【问题讨论】:

  • 附带说明将枚举构造函数指定为private 是多余的。
  • 无法编写默认构造函数。默认构造函数是编译器为没有编写构造函数的类提供的构造函数。

标签: java constructor enums


【解决方案1】:

错误来自enum 成员的声明:由于构造函数采用String label,因此您需要提供要传递给该构造函数的字符串:

FOOD("food"), BEVERAGE("bev"), DEFAULT("[default]");

【讨论】:

    【解决方案2】:

    only 您目前拥有的构造函数需要传入一个字符串 - 但所有枚举值(FOODBEVERAGEDEFAULT不需要 指定字符串,所以它们不能调用构造函数。

    两种选择:

    • 添加无参数构造函数:

      private ProductCategory() {}
      

      不过,这不会将标签与您的枚举值相关联。

    • 在每个值上指定标签:

      FOOD("Food"), BEVERAGE("Beverage"), DEFAULT("Default");
      

    后者几乎肯定是你想要的。

    【讨论】:

      【解决方案3】:

      可以在声明 Enum 成员本身时调用 Enum 构造函数。

      public enum ProductCategory
          {
              FOOD("label1"),
              BEVERAGE("label2"),
              DEFAULT("label3");
      
              private final String label;
      
              ProductCategory(String label)
              {
                  this.label = label;
              }
      
              public String getLabel()
              {
                  return label;
              }
          }
      

      【讨论】:

        【解决方案4】:
        public enum ProductCategory {
            FOOD("FOOD"), BEVERAGE("BEVERAGE"), DEFAULT("DEFAULT");
        
            private final String label;
        
            private ProductCategory(String label) {
                this.label = label;
            }
        
            public String getLabel() {
                return label;
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2011-08-20
          • 2011-10-30
          • 2020-10-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-03
          • 2018-05-22
          相关资源
          最近更新 更多