无法在枚举中实例化类型错误

时间:2014-09-14 00:14:20

标签: java

我收到错误消息,说我无法为静态成员实例化CustomLogLevel类型。

我环顾四周,我从一个现有的项目中提取这个,所以我在这里缺少任何帮助吗?

public enum CustomLogLevel {
    ERROR(1),
    DEBUG(2),
    INFO(3),
    WARNING(4),
    IGNORE(5);
    private int value;

    static {
        ERROR = new CustomLogLevel("ERROR", 0, 1);
        DEBUG = new CustomLogLevel("DEBUG", 1, 2);
        INFO = new CustomLogLevel("INFO", 2, 3);
        WARNING = new CustomLogLevel("WARNING", 3, 4);
        IGNORE = new CustomLogLevel("IGNORE", 4, 5);
        ENUM$VALUES = new CustomLogLevel[]{ERROR, DEBUG, INFO, WARNING, IGNORE};
    }

    private CustomLogLevel(int value) {
        this.value = value;
    }

    public int getValue() {
        return this.value;
    }
}

2 个答案:

答案 0 :(得分:1)

枚举本质上是静态的,你无法启动它们。

而是这样做:

public enum CustomLogLevel {
    ERROR("ERROR", 1),
    DEBUG("DEBUG", 2),
    INFO("INFO", 3),
    WARNING("WARNING", 4),
    IGNORE("IGNORE", 5);

    private String name;
    private int value;

    private CustomLogLevel(String name, int value) {
        this.name = name;
        this.value = value;
    }

    public int getValue() {
        return this.value;
    }
}

然后你可以这样做:

CustomLogLevel logLevel = CustomLogLevel.ERROR;

答案 1 :(得分:0)

枚举只是一个具有众所周知的有限数量实例的类。这些实例不是手动创建的,而是使用枚举的特殊语法。

而不是

ENUM_VALUE_1 = new CustomLogLevel(param1, param2);
ENUM_VALUE_2 = new CustomLogLevel(param1, param2);

我们只是在枚举体的开头写:

ENUM_VALUE_1(param1, param2),
ENUM_VALUE_2(param1, param2);

这种语法无论如何都在调用构造函数,它只是隐藏了。

如果你需要的每个枚举值只是级别值,那么你的构造函数只需要你编写的一个参数,但是你不需要静态块(因为第一行已经完成了工作):

public enum CustomLogLevel {
    ERROR(1),
    DEBUG(2),
    INFO(3),
    WARNING(4),
    IGNORE(5);

    private int value;

    private CustomLogLevel(int value) {
        this.value = value;
    }

    public int getValue() {
        return this.value;
    }
}