Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java将未知基元数组转换为对象数组_Java_Xml_Generics_Serialization_Reflection - Fatal编程技术网

Java将未知基元数组转换为对象数组

Java将未知基元数组转换为对象数组,java,xml,generics,serialization,reflection,Java,Xml,Generics,Serialization,Reflection,我一直在尝试创建自己的库,使用反射来检查方法命名模式和方法返回类型,从而将基本类型从类序列化和反序列化为xml,从xml序列化和反序列化为类实例 到目前为止,我已经能够用所有基本的原语类型来实现这一点,但我一直坚持序列化相同原语的数组 例如,我调用class方法来获取基元数组: method.invoke(clazz, (Object[])null); 这个方法将只返回一个基本数组int[]、double[]、float[]、char[]等,尽管我们不知道它是哪一个 我试过使用泛型,例如 T

我一直在尝试创建自己的库,使用反射来检查方法命名模式和方法返回类型,从而将基本类型从类序列化和反序列化为xml,从xml序列化和反序列化为类实例

到目前为止,我已经能够用所有基本的原语类型来实现这一点,但我一直坚持序列化相同原语的数组

例如,我调用class方法来获取基元数组:

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[]
解决序列化问题似乎有些过分。一般数组应保存在对象中。我想建议不要太强调。如果想要一个
对象[]
,很好。它工作得很好。我从未想过我可以以数组的形式访问对象。非常感谢。