如何在scala中将java.util.Set [Field]转换为Array [Field]?

时间:2015-07-21 13:05:34

标签: scala reflection

我正在使用思考进行一些操作,在我将java.util.Set[Field]转换为Array[Field]之间我尝试了.toArray但是获得了Array[AnyRef]而不是Array[Field]

任何人都可以帮助我将java.util.Set转换为数组保留类型信息吗?

我使用的是Scala的2.11.7版本

1 个答案:

答案 0 :(得分:4)

Arrays in Java are not generic,因此当您从Java集合转换时,它将生成Array[Object]

查看toArrayjava.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]