是否可以填充通用列表并从java中的方法返回它?

时间:2013-07-04 06:54:56

标签: java generics

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

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;
}

2 个答案:

答案 0 :(得分: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方法中的调用不需要强制转换。

答案 1 :(得分: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);
}