Java将未知基元数组转换为对象数组
我一直在尝试创建自己的库,使用反射来检查方法命名模式和方法返回类型,从而将基本类型从类序列化和反序列化为xml,从xml序列化和反序列化为类实例 到目前为止,我已经能够用所有基本的原语类型来实现这一点,但我一直坚持序列化相同原语的数组 例如,我调用class方法来获取基元数组:Java将未知基元数组转换为对象数组,java,xml,generics,serialization,reflection,Java,Xml,Generics,Serialization,Reflection,我一直在尝试创建自己的库,使用反射来检查方法命名模式和方法返回类型,从而将基本类型从类序列化和反序列化为xml,从xml序列化和反序列化为类实例 到目前为止,我已经能够用所有基本的原语类型来实现这一点,但我一直坚持序列化相同原语的数组 例如,我调用class方法来获取基元数组: method.invoke(clazz, (Object[])null); 这个方法将只返回一个基本数组int[]、double[]、float[]、char[]等,尽管我们不知道它是哪一个 我试过使用泛型,例如 T
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
有没有一种方法可以将这个基本体数组转换成一个通用的对象数组
以一般方式表示,无需知道或检查数组的类型。或者我应该循环遍历所有的基元类型并分别处理它们
我可以用两种方式来做这件事。我想用一种通用的方式来做这件事的唯一原因是减少冗余代码
提前感谢。您可以使用实用程序类
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;
}
公共静态对象[]对象数组(对象数组){
int length=Array.getLength(数组);
Object[]ret=新对象[长度];
for(int i=0;i
是否执行您想要的操作?对象结果=方法。调用(clazz,(Object[])null);
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);
}
}
类arrayKlazz=result.getClass();
if(arrayKlazz.isArray()){
类klazz=result.getComponentType();
if(klazz==int.class){
int[]intArray=arrayKlazz.cast(结果);
}
}
在对象中保存(原语)数组似乎更合适(
result
。您还需要getLength(),这将是我的下一步。这将允许我从数组中获取项目,但我仍然需要知道如何首先将其存储在适当的数组中。这将如何帮助从结果中获取对象[]
?对象[]
已回答。但是对于int[]
,double[]
等等,用Object[]
解决序列化问题似乎有些过分。一般数组应保存在对象中。我想建议不要太强调。如果想要一个对象[]
,很好。它工作得很好。我从未想过我可以以数组的形式访问对象。非常感谢。