java将未知类型泛型列表转换为数组
我正在使用反射进行映射
通过反射,我可以知道一个类的每个Field
是否引用了类型为“array”的属性,并且我还可以得到类型为array的类
现在,我想设置对象场的值。现在,出于某种原因,我可以获取填充对象字段的数据,但它不是数组的形式。而是一个Collection<?>
为了便于可视化,我有一些这样的代码:
/** create a new T instance, with the data taken from something*/
<T> T convert(Class<T> cls, Object something) {
T obj = cls.newInstance();
for (Field field : cls.getFields()) {
if (field.getType().isArray()) {
Class<?> arrayType = field.getType().getComponentType();
Collection<?> collection = this.getData(arrayType, something);
Object array = CONVERT(collection);
field.set(obj, arrayData);
}
}
}
最后,我需要将Collection<?>
对象转换为?[]
对象,其中“?”这在道义上是正确的
我知道有collData.toArray()
,但它构建了一个Object[]
,巫婆是不兼容的;我知道有collData.toArray(T[])
,但我不知道如何在这种情况下使用它
# 1 楼答案
或者用下面更容易理解的方法来做。创建一个数组,并将其作为参数提供给
colleation.toArray
:# 2 楼答案
Collection作为一个toArray()函数,返回集合中填充的内容的数组。 从java文档:
# 3 楼答案
由于已经有了组件类型,请使用Array.newInstance: