Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 枚举的默认值_Java_Enums - Fatal编程技术网

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文档中可以看出:“枚举类型是一种特殊的数据类型,它使变量成为一组预定义的常量。变量必须等于为其预定义的值之一。”--我认为您不能这样做。为什么不使用类的实例呢?