我有一个使用反射来填充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;
}
答案 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);
}