我一直在尝试创建自己的库,以使用反射来检查方法命名模式和方法返回类型,从而将基元类型从类序列化和反序列化到xml,并从xml序列化到类实例。
到目前为止,我已经能够对所有基本的基元类型执行此操作,但我一直在序列化相同基元的数组。
例如,我调用类方法来获得基元数组:
method.invoke(clazz, (Object[])null);
这个方法将只返回一个基元数组int[], double[], float[], char[]
等,尽管我们不知道它将是哪一个
我试过使用这样的通用
T t = (T)method.invoke(clazz, (Object[])null);
T[] t = (T[])method.invoke(clazz, (Object[])null);
但它不允许我从基元数组向对象进行强制转换。
假设我们不知道类型,就不能使用Array.newInstance
。
有没有一种方法可以将这个基元数组转换为通用的Object数组。
以一种通用的方式,意味着不需要知道或检查数组的类型。或者我应该循环遍历所有的基元类型并分别处理它们。
我可以两种方式都这样做——我想以通用方式这样做的唯一原因是减少冗余代码。
提前谢谢。
您可以使用Array实用程序类
public static Object[] toObjectArray(Object array) {
int length = Array.getLength(array);
Object[] ret = new Object[length];
for(int i = 0; i < length; i++)
ret[i] = Array.get(array, i);
return ret;
}
java.lang.reflect.Array.get((能满足您的要求吗?
Object result = method.invoke(clazz, (Object[])null);
Class<?> arrayKlazz = result.getClass();
if (arrayKlazz.isArray()) {
Class<?> klazz = result.getComponentType();
if (klazz == int.class) {
int[] intArray = arrayKlazz.cast(result);
}
}
在对象中保留(基元(数组似乎更合适(上面的result
(。