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

How to convert from Scala string to Java enum

我有一个 API 接收表示语言的字符串。我的 Scala 代码(使用 Scalatra 作为 API)调用我必须支持的现有 Java 代码。此 Java 代码要求语言采用它定义的枚举形式。

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

例如,我可以这样做:

      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

...但是要完成这项工作,那将是一段相当大的代码。有没有更好的方法来简单地说,"if the string matches one of the enums, return that enum so I can pass it in?"

Java的Enum其实已经有了处理这个的方法; valueOf。 只需将 String 传递给方法,并将其包装在 try...catch 块中以处理不匹配的情况。

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