如何转换java.util.在scala中设置[Field]为数组[Field]



我正在使用反射做一些操作,在我将java.util.Set[Field]转换为Array[Field]和我尝试.toArray之间,但得到Array[AnyRef]而不是Array[Field]

谁能帮助我在转换java.util.Set数组保存类型信息?

我使用的是Scala 2.11.7版本

Java中的数组不是泛型的,因此当您从Java集合转换时,它将生成Array[Object]

查看java.util.SettoArray的文档,我们发现

方法的两个变体

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]

相关内容

  • 没有找到相关文章

最新更新