我收到错误消息,说我无法为静态成员实例化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;
}
}
答案 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;
}
}