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]);