将null转换为Enum.NULL

Xtr*_*mer 4 java enums

我有一个这样的枚举:

public enum Type{
    CSV, EXCEL, PDF, URL, NULL
}
Run Code Online (Sandbox Code Playgroud)

现在我从xml文件中读取一个String并用于Type.valueOf(string);将值解析为枚举.如果xml文件中不存在此部分,则字符串是否null存在"null".有没有办法转换null"null"或应该更改return null;return "null";?或者应该为null甚至不是枚举的一部分?

Oli*_*ire 6

你应该做的是使用别的东西,NULL并以不同的方式解析这种情况:

public enum Type {
  CSV, EXCEL, PDF, URL, NONE;
  public static Type from(String text) {
    if (text == null) {
      return NONE;
    } else {
      return valueOf(text.toUpperCase());
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

或者更好的是,使用选项:

public enum Type {
  CSV, EXCEL, PDF, URL; // Note the absence of NULL/NONE/WHATEVER
  public static Optional<Type> from(String text) {
    return Optional.ofNullable(text)
      .map(String::toUpperCase)
      .map(Type::valueOf);
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 伟大的想法,用`Optional`(伤心地听到,OP不能使用它)。但我也想给出一个单行解决方案的提示:`return Optional.ofNullable(name).map(String::toUpperCase).map(Type::valueOf).orElse(NULL);` (2认同)