将Java EnumSet转换为数组

时间:2014-03-04 21:25:08

标签: scala

我正在尝试制作转换器:

scala>   implicit def enumSetToArray[T : ClassTag](enumSet: EnumSet[T]): Array[T] = enumSet.toArray[T](new Array[T](enumSet.size()))
<console>:9: error: type mismatch;
 found   : Array[T]
 required: Array[T with Object]
Note: T >: T with Object, but class Array is invariant in type T.
You may wish to investigate a wildcard type such as `_ >: T with Object`. (SLS 3.2.10)
         implicit def enumSetToArray[T : ClassTag](enumSet: EnumSet[T]): Array[T] = enumSet.toArray[T](new Array[T](enumSet.size()))
                                                                                                       ^
<console>:9: error: type mismatch;
 found   : Array[T with Object]
 required: Array[T]
Note: T with Object <: T, but class Array is invariant in type T.
You may wish to investigate a wildcard type such as `_ <: T`. (SLS 3.2.10)
         implicit def enumSetToArray[T : ClassTag](enumSet: EnumSet[T]): Array[T] = enumSet.toArray[T](new Array[T](enumSet.size()))
                                                                                                      ^

想法?我的理解是我必须使用ClassTag来保存类的擦除,以便反射可以实例化数组,但显然这样做会使方差混乱。

1 个答案:

答案 0 :(得分:0)

你试过吗

implicit def enumSetToArray[T <: Enum[T]](enumSet: EnumSet[T])(implicit ev: ClassTag[T]): Array[T] = enumSet.toArray[T](new Array[T](enumSet.size))