当前位置: 首页 > 面试题库 >

Java将未知的原始数组转换为对象数组

梅飞龙
2023-03-14
问题内容

我一直在尝试创建自己的库,以使用反射来检查方法命名模式和方法返回类型,以从类到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我们不知道类型的假设。

有没有一种方法可以将这种原语数组转换为通用的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;
}


 类似资料:
  • 问题内容: 如果你有一个具有原始类型(例如Byte,Integer,Char等)的Java对象数组。有没有一种巧妙的方法可以将其转换为原始类型的数组?特别是可以做到这一点,而不必创建新的数组并遍历内容。 因此,例如 将其转换为最简洁的方法是什么 不幸的是,在Hibernate和我们无法控制的某些第三方库之间进行接口连接时,这是我们经常要做的事情。看来这是一个很普通的操作,所以如果没有捷径,我会感到

  • 问题内容: 转换的最佳方法是什么: 至: 问题答案: ECMAScript 6引入了易于填充的内容: 该方法用于将所有可枚举的自身属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 数组的自身属性不会被复制,因为它无法枚举。 另外,您可以使用ES6 传播语法来达到相同的结果:

  • 问题内容: 这可能是一个简单的,总机问题,但我的第一次尝试令人惊讶地完全失败了。我想获取一组原始的long并将其转换成一个列表,我试图这样做: 什么是正确的方法? 问题答案: 我发现使用apache commons lang ArrayUtils(JavaDoc,Maven依赖项)很方便 它还具有反向API 编辑:更新以提供完整的转换为列表,如注释和其他修复建议。

  • 问题内容: 我正在使用返回“对象”类型的普通对象的Web服务。调试清楚地表明此对象中存在某种Array,因此我想知道如何将“ Object”转换为Array(或类似对象)? 我尝试了以下方法: 但是没有任何效果。我总是得到一个InvocationTargetException。 我究竟做错了什么? 编辑 : 可悲的是,我不得不删除指向显示Eclipse调试器输出的图像的链接,因为它不再可用。请不要

  • 问题内容: 以下代码有什么问题? 该代码在最后一行有以下错误: 线程“主”中的异常java.lang.ClassCastException:[Ljava.lang.Object; 无法转换为[Ljava.lang.Integer; 问题答案: 可以使用或。 在这里点击的原因是你不能将的数组视为的数组。是的子类型,但不是的子类型。 并且以下内容也不会给出。

  • 问题内容: 转换的最佳方法是什么: 至: 问题答案: ECMAScript 6引入了易于填充的内容: 该方法用于将所有可枚举的自身属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 数组的自身属性不会被复制,因为它无法枚举。 另外,您可以使用ES6 传播语法来达到相同的结果: