0

我有一个使用反射来填充数组的Object[]方法,该方法当前返回 Object[],我想将它转换为创建的实际反射类实例。例如:

public Object[] populateReflectionObject(Class<?> c) {
    Object[] reflectionArrayPopulated = methodToCreateArrayFromReflection(c);
    return reflectionArrayPopulated;
}

FinalObject[] populate = (Object[])populateReflectionObject(FinalObject.class);

无法在数组之间进行转换,是否可以通过使用泛型来实现我想要的?

编辑:我创建了我想要投射的对象:

Object[] object = new Object[finalObjectArray.length];
for (int i = 0; i < finalObjectArray.length; i++) {
   object[i] = finalObjectArray;
}
4

2 回答 2

2

您可能希望生成您的方法并禁止有关强制转换数组的警告:

import java.lang.reflect.Array;
import java.util.Arrays;

public class TestClass {
    @SuppressWarnings("unchecked")
    public static <T> T[] createArray(Class<T> clazz) {
        return (T[]) Array.newInstance(clazz, 2);
    }

    public static void main(String[] args) {
        String[] strings = createArray(String.class);
        strings[0] = "Hello";
        strings[1] = "World";
        System.out.println(Arrays.toString(strings));
    }
}

我在这里使用静态方法,但它也适用于实例方法。请注意,main 方法中的调用不需要强制转换。

于 2013-07-04T07:05:53.077 回答
1

您可以在数组之间进行转换(在这种情况下进行未经检查的向下转换)。

使用泛型处理它(以便您可以返回任何数组类型)将是这样的

public <T> T[] populateReflectionObject(Class<T> c) {
    Object reflectionArrayPopulated = ...
    return (T[]) reflectionArrayPopulated;
}

编辑:下面的片段更准确(如果我这次得到了你想要做的事情)。

@SuppressWarnings("unchecked")
public <T> T[] createArray(Class<T> clazz, int length) {
    return (T[]) Array.newInstance(clazz, length);
}
于 2013-07-04T07:03:54.763 回答