Scala:使用Java枚举和带有valueOf的参数化函数
我正在研究一些混合的Scala:使用Java枚举和带有valueOf的参数化函数,java,scala,enums,Java,Scala,Enums,我正在研究一些混合的Java/Scala代码,由于我对Scala有些陌生,我遇到了一个似乎应该很容易解决的问题,但这让我感到困惑 我在Java中有许多枚举,我想做的是编写一个通用的参数化Scala函数,它接受List[String]并将其转换为枚举值的Set: // Not sure if <: is the right operator to say T is a Java enum here. def strToEnumSet[T <: Enum[T]](values: List
Java
/Scala
代码,由于我对Scala
有些陌生,我遇到了一个似乎应该很容易解决的问题,但这让我感到困惑
我在Java中有许多枚举,我想做的是编写一个通用的参数化Scala函数,它接受List[String]
并将其转换为枚举值的Set
:
// Not sure if <: is the right operator to say T is a Java enum here.
def strToEnumSet[T <: Enum[T]](values: List[String]): Set[T] =
values.map(x => T.valueOf(x)).toSet
如果是,我应该为cls
传递什么?假设我有一个特定的实例,我想用一个名为MyEnum
的enum
和一个名为values
的List[String]
调用它:
val myEnumSet: Set[MyEnum] = strToEnumSet[MyEnum](???, values)
我应该为传递什么?
当然,避免通过cls
是理想的,但我不确定这是否可行。
谢谢你能给我的任何帮助 这对我很有用:
X.java:
public enum X {
a,
b,
c
}
Test.scala:
val a = strToEnumSet(classOf[X], List("a"))
可能的改进:
def strToEnumSet[T <: Enum[T]](values: Iterable[String])(implicit m: Manifest[T]): Set[T] =
values.map(x => Enum.valueOf(m.runtimeClass.asInstanceOf[Class[T]], x)).toSet
谢谢这正是我想要的。对不起,拉多。第一次使用堆栈溢出(谷歌搜索除外),所以我不知道系统的细节。完成-再次感谢您!
def strToEnumSet[T <: Enum[T]](values: Iterable[String])(implicit m: Manifest[T]): Set[T] =
values.map(x => Enum.valueOf(m.runtimeClass.asInstanceOf[Class[T]], x)).toSet
val a = strToEnumSet[X](List("a"))