有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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[]),但我不知道如何在这种情况下使用它


共 (3) 个答案

  1. # 1 楼答案

    或者用下面更容易理解的方法来做。创建一个数组,并将其作为参数提供给colleation.toArray

    Object[] array = collection.toArray(new Object[collection.size()] );
    field.set(obj, array);
    
  2. # 2 楼答案

    Collection作为一个toArray()函数,返回集合中填充的内容的数组。 从java文档:

    String[] y = x.toArray(new String[0]);
    
  3. # 3 楼答案

    由于已经有了组件类型,请使用Array.newInstance

    Object[] array = collection.toArray(
                        (Object[])Array.newInstance(arrayType, collection.size()));
    field.set(obj, array);