2014-03-04 70 views
0

我試圖做一個轉換器:轉換一個Java EnumSet到數組

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從擦除保存類,以便反射可以實例化數組,但顯然這樣做與方差混亂。

+0

我不知道在哪裏對象從何而來,但我沒有打這一個:https://issues.scala-lang.org/browse/SI-8360 –

回答

0

你嘗試

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