Java 枚举的默认值
我想为枚举类定义一个默认值。我的枚举的思想是定义一些特定的Java 枚举的默认值,java,enums,Java,Enums,我想为枚举类定义一个默认值。我的枚举的思想是定义一些特定的字符串值,并将它们与枚举相关联。但是,如果用户提供了我不期望的字符串,我希望枚举反映无效状态。考虑 public class EnumDemo { public enum Food { HAMBURGER("h"), FRIES("f"), HOTDOG("d"), ARTICHOKE("a"), INVALID("invalid"); Food(String code) { this.code =
字符串值,并将它们与枚举相关联。但是,如果用户提供了我不期望的字符串
,我希望枚举反映无效状态。考虑
public class EnumDemo {
public enum Food {
HAMBURGER("h"), FRIES("f"), HOTDOG("d"), ARTICHOKE("a"), INVALID("invalid");
Food(String code) {
this.code = code;
}
private final String code;
public String getCode() {
return code;
}
public static Food fromString(String value) {
return Arrays.stream(Food.values()).filter(s -> s.code.equalsIgnoreCase(value)).findFirst()
.orElse(Food.INVALID);
}
}
public static void main(String[] args) {
Food f1 = Food.fromString("h");
System.out.println(f1 + " " + f1.getCode());
f1 = Food.fromString("x");
System.out.println(f1 + " " + f1.getCode());
}
}
这是打印出来的
HAMBURGER h
INVALID invalid
这里的问题是我正在为代码定义字符串<代码>无效
按照进行硬编码
无效(“无效”)
有可能把它变成一个变量吗?这样我就可以跟踪无效输入是什么?我试过了
无效(字符串x)
但显然有一个语法异常。不使用枚举会更好吗
最后,我希望跟踪无效的输入的原因是,在将来,我希望能够根据用户灵活地更改枚举。您可以创建一个包装来隐藏原始输入:
public class FoodInput {
private final Food food;
private final String input;
public FoodInput(String input) {
this.food = Food.fromString(input);
this.input = input;
}
public Food getFood() {
return food;
}
public String getInput() {
return input;
}
}
从Oracle文档中可以看出:“枚举类型是一种特殊的数据类型,它使变量成为一组预定义的常量。变量必须等于为其预定义的值之一。”--我认为您不能这样做。为什么不使用类的实例呢?