我正在使用思考进行一些操作,在我将java.util.Set[Field]
转换为Array[Field]
之间我尝试了.toArray
但是获得了Array[AnyRef]
而不是Array[Field]
任何人都可以帮助我将java.util.Set
转换为数组保留类型信息吗?
我使用的是Scala的2.11.7版本
答案 0 :(得分:4)
Arrays in Java are not generic,因此当您从Java集合转换时,它将生成Array[Object]
。
查看toArray
中java.util.Set
的{{3}},我们发现了该方法的两种变体
Object[] toArray()
返回一个包含此集合中所有元素的数组。
和
<T> T[] toArray(T[] a)
返回一个包含此set中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。
您目前正在使用第一个变体,但您可以通过传递正确类型的数组作为参数来使用第二个变体。
这是Java使用的“解决方法”,以便生成正确类型的数组。
这是一个例子
import java.util.HashSet
import java.lang.reflect.Field
val set = new HashSet[Field]
val arr1 = set.toArray // Array[Object]
val arr2 = set.toArray(Array[Field]()) // Array[Field]
另一个可行的选择是将您的java.util.Set
转换为scala Set
,这会提供“更智能”的toArray
方法:
import java.util.HashSet
import java.lang.reflect.Field
import scala.collection.JavaConversions._
val set = new HashSet[Field]
val arr = set.toSet.toArray // Array[Field]