繁体   English   中英

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

[英]How do I convert a java.util.Set[Field] to an Array[Field] in scala?

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

有人可以帮助我将java.util.Set转换为Array并保留类型信息吗?

我正在使用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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM