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



我一直在尝试创建自己的库,以使用反射来检查方法命名模式和方法返回类型,从而将基元类型从类序列化和反序列化到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(。

相关内容

  • 没有找到相关文章

最新更新