构造函数枚举错误

时间:2017-05-19 17:15:52

标签: java constructor enums

# Create a list of dataframes
all_data <- list("motors"=MASS::motors)
my_name <- "motors"

######## Works
df <- all_data[[my_name]]
new_df <- dplyr::filter(df, df$cens == 1)

####### doesn't work
new_df <- dplyr::filter(all_data[[my_name]], all_data[[my_name]]$cens == 1)
# Error: invalid subscript type 'integer'

我想在这个枚举类中实现方法getLabel(),但我得到错误:&#34;构造函数ProductCategory()未定义&#34;。

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

P.S。我是java的初学者。

4 个答案:

答案 0 :(得分:3)

错误来自enum成员的声明:因为构造函数需要String label,所以需要提供传递给该构造函数的字符串:

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

答案 1 :(得分:1)

您目前获得的唯一构造函数需要传入一个字符串 - 但所有枚举值(FOODBEVERAGEDEFAULT指定字符串,因此无法调用构造函数。

两个选项:

  • 添加无参数构造函数:

    private ProductCategory() {}
    

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

  • 在每个值上指定标签:

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

后者几乎可以肯定你想要的。

答案 2 :(得分:0)

在声明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;
        }
    }

答案 3 :(得分:0)

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