Java 将未知类型泛型列表转换为数组

Java 将未知类型泛型列表转换为数组,java,arrays,generics,reflection,Java,Arrays,Generics,Reflection,我正在使用反射进行映射 通过反射,我可以知道一个类的字段s是否引用了类型为“array”的属性,并且我还可以得到具有数组类型的类 现在,我想设置一个对象的字段值。现在,出于某种原因,我可以获取填充对象字段的数据,但它不是数组的形式。而是一个集合 为了便于可视化,我有一些这样的代码: /** create a new T instance, with the data taken from something*/ <T> T convert(Class<T> cls, Ob

我正在使用反射进行映射

通过反射,我可以知道一个类的
字段
s是否引用了类型为“array”的属性,并且我还可以得到具有数组类型的类

现在,我想设置一个对象的字段值。现在,出于某种原因,我可以获取填充对象字段的数据,但它不是数组的形式。而是一个
集合

为了便于可视化,我有一些这样的代码:

/** 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);
        }
    }
}
/**创建一个新的T实例,其中的数据取自某个对象*/
T转换(类cls,对象某物){
T obj=cls.newInstance();
for(字段:cls.getFields()){
if(field.getType().isArray()){
类arrayType=field.getType().getComponentType();
Collection=this.getData(arrayType,something);
对象数组=转换(集合);
字段集(obj,arrayData);
}
}
}
在一天结束时,我需要将一个
集合
对象转换为一个
?[]
对象,其中“?”在数学上是正确的


我知道有
collData.toArray()
,但它构建了一个
对象[]
,它是不兼容的;我知道有collData.toArray(T[]),但我不知道如何在这种情况下使用它。

由于您已经有了组件类型,请使用:


或者按照下面的方法做,这样更容易理解。创建一个数组并将其作为参数提供给
集合。toArray

Object[] array = collection.toArray(new Object[collection.size()] );
field.set(obj, array);
集合作为一个toArray()函数,返回集合填充内容的数组。 从java文档:

String[] y = x.toArray(new String[0]);

objectarray=collection.toArray(array.newInst…)因为类型不是对象数组。@JoopEggen,随便什么。任何非基元数组都可以升级到
对象[]
。对于这段代码来说,这并不重要。是的,如果你不是傻瓜,你可以随意更改它。。。对象[]y=x.toArray(新对象[0]);
String[] y = x.toArray(new String[0]);