我想为Enum类定义默认值。我的枚举的想法是定义一些特定的String
值并将它们与枚举联系起来。但是,如果用户提供了我不期望的String
,我希望枚举能够反映无效状态。考虑
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
这里的问题是我正在为代码定义字符串。 invalid
按照
INVALID("invalid")
是否可以将其变为变量?这样我就可以跟踪无效输入是什么?我试过了
INVALID(String x)
但显然有一个语法异常。不使用枚举会更好吗?
最后,我想跟踪invalid
输入的原因是,在将来,我希望能够灵活地根据用户更改枚举。
答案 0 :(得分:2)
您可以创建一个包装来存储原始输入:
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;
}
}