我正在使用反射做一些操作,在我将java.util.Set[Field]
转换为Array[Field]
和我尝试.toArray
之间,但得到Array[AnyRef]
而不是Array[Field]
。
谁能帮助我在转换java.util.Set
数组保存类型信息?
我使用的是Scala 2.11.7版本
Java中的数组不是泛型的,因此当您从Java集合转换时,它将生成Array[Object]
。
查看java.util.Set
中toArray
的文档,我们发现
Object[] toArray()
返回一个包含集合中所有元素的数组。
和
<T> T[] toArray(T[] a)
返回一个包含集合中所有元素的数组;返回数组的运行时类型为指定数组的运行时类型。
您当前使用的是第一个变量,但是您可以通过传递正确类型的数组作为参数来使用第二个变量。
这是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]