如何从Scala字符串转换为Java枚举

Chr*_*ler 0 java enums scala

我有一个API,它接收表示一种语言的字符串。我的Scala代码(将Scalatra用于API)调用了我必须支持的现有Java代码。该Java代码期望该语言采用其定义的枚举形式。

我可以对字符串进行详尽的模式匹配以返回正确的枚举元素,但是我必须相信还有更好的方法吗?

例如,我可以这样做:

      f.language.value.get.toUpperCase.split(",").map {
        case "ALL" => JavaLanguageEnum.ALL
        case "AAA" => JavaLanguageEnum.AAA
        case "BBB" => JavaLanguageEnum.BBB
        case "CCC" => JavaLanguageEnum.CCC
        case "DDD" => JavaLanguageEnum.DDD
        case "EEE" => JavaLanguageEnum.EEE
        case "FFF" => JavaLanguageEnum.FFF
        case _ => JavaLanguageEnum.ALL
      }.toList
Run Code Online (Sandbox Code Playgroud)

...但是那将是完成这项工作的一大段代码。是否有更好的方法简单地说:“如果字符串与枚举之一匹配,则返回该枚举以便我可以将其传递给它?”

res*_*man 5

Java Enum实际上已经有了处理此问题的方法。valueOf。只需将String方法传递给方法,然后将其包装在一个try...catch块中以处理不匹配的情况。

f.language.value.get.toUpperCase.split(",").map {
  try {
    JavaLanguageEnum.valueOf(_)
  } catch {
    case e: IllegalArgumentException => JavaLanguageEnum.ALL
  }
}
Run Code Online (Sandbox Code Playgroud)