ENUM

时间:2018-06-13 18:01:18

标签: java enums

我想为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输入的原因是,在将来,我希望能够灵活地根据用户更改枚举。

1 个答案:

答案 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;
    }
}