Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala:使用Java枚举和带有valueOf的参数化函数_Java_Scala_Enums - Fatal编程技术网

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"))