如何从 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
}
}
我有一个 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
}
}