【问题标题】:Java Generics : Convert Object Array to Primitive Array based on typeJava 泛型:根据类型将对象数组转换为原始数组
【发布时间】:2020-12-19 18:29:38
【问题描述】:

我想根据数组中存在的元素类型将对象数组转换为原始数组。

我想实现一个函数,它以对象数组和类型(作为字符串)作为输入,并且应该返回实际的数组,即

func(Object[] arr, String type) 应该被实现,这样当我调用时

func(Object[] arr, "int"),它应该返回 int[]

func(Object[] arr, "double"), 它应该返回 double[] 等等。

是否可以这样做,如果不能,如何从 Object[] 获取原始数组?

编辑:我的用例是我需要创建具有某些字段的 A 类的“n”个对象(比如说 2)。我将字段作为长度为 n 的对象数组,即

对象[] 字段1

对象[] 字段2

我还获得了字符串格式(“int”或“double”等)的字段类型,这始终是原始的。现在我们可以创建 A 类的对象吗?如果可能的话,如何创建?

【问题讨论】:

  • 您要检索什么?这里的问题是,如果您尝试在一个函数中执行此操作,则无法定义非泛型返回类型。如果您创建多个函数,如何将其转换为也不是泛型的单个对象?我认为我们需要更多背景信息来提供更好的帮助。
  • @JayMason 我已经添加了我的用例。也许它给出了更好的主意
  • 是不是像 Object[] 会有 n 个元素? Object[] field1 将拥有所有 n 个对象的第一个字段,而 Object[] field2 将拥有所有 n 个对象的第二个字段?

标签: java arrays generics


【解决方案1】:

我建议不要预先分配一个数组,而是使用像 ArrayList 这样的集合,然后在其中生成结果数组。

ArrayList field1Array = Arrays.stream(arr).map(Object::field1)

如果还有更多的字段需要分配,那么……

ArrayList field1Array = new ArrayList();
ArrayList field2Array = new ArrayList();
Arrays.stream(arr).forEach(object -> {
  field1Array.add(object.getField1());
  field2Array.add(object.getField2());
})

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 2021-12-01
    相关资源
    最近更新 更多