【问题标题】:toArray() returns object[]toArray() 返回对象[]
【发布时间】:2020-05-22 19:52:01
【问题描述】:

我正在尝试使用 toArray() 将 ArrayList 转换为 Array,但它返回一个 object[] 而不是 double[]。见下文:

double [] arr = arrList.toArray(new Double[arrList.size()]);

我收到不兼容的类型错误。

这是 arrList 包含的内容:

I/System.out: [0.0, 2.455430030822754, 1.834529995918274, 0.7368429899215698, -0.5264459848403931, -1.5101100206375122, -1.8526500463485718, -1.6131700277328491, -0.9388419985771179, 0.053711701184511185, 0.35541099309921265, -0.18560799956321716, -0.884518027305603, -1.4304900169372559, -1.5486400127410889, -0.943471014499, 0.0]

获取方式如下:

private void rec(SensorEvent event) {

    double x = event.values[0];

    arrList.add(x);

}

我尝试过不调整数组大小(即使用新的 Double[0]),虽然我认为这不是问题,但这也不起作用。

我在网上寻找了类似的 Q,我发现的只是字符串示例,我在想 Double 可能是问题所在?不太确定。

在这方面很新,如果很明显,请道歉。

【问题讨论】:

  • @Code-Apprentice 现在已经解决了
  • @ItsLogic,解释一下。我还没有听说过数组拆箱(出于性能原因,这将是一个糟糕的功能)。
  • @Code-Apprentice 是,但 toArray() 不能应用于 double[]
  • @M.Prokhorov 我指的是对将 double[] 更改为 Double[] 的帖子进行了编辑
  • @ItsLogic,我明白了。我以为你提到了第一条评论。

标签: java arrays arraylist collections toarray


【解决方案1】:
double [] arr = arrList.toArray(new Double[arrList.size()]);

double[]Double[] 是不同的类型。虽然 Java 可以通过自动装箱和自动拆箱在 doubleDouble 之间进行转换,但它不能从 Double[] 转换为 double[]。您可以通过以下方式解决问题:

Double [] arr = arrList.toArray(new Double[arrList.size()]);

【讨论】:

  • 谢谢。不过,我仍然遇到类型不兼容的错误,不太清楚为什么不幸。
  • @pizza,然后编辑您的问题以展示您如何构建您的 arrList 变量。
  • 我已经编辑了我的问题。可能是因为我将 arrList 中的条目定义为双精度?
  • @pizza 你是说你使用的是List<double>吗?因为这在 Java 中是非法的——原语不能用作泛型类型参数。但是,List<Double> 是完全合法的。当使用 List<Double> 时,由于自动装箱,您可以轻松地向其添加原始 double 元素。
【解决方案2】:

你可以使用:

Double[] array = arrList.toArray(Double[]::new);

注意,方法引用是在 java 8 和 java 11 中引入的。请参阅 Code-Apprentice 对 java 7 编译解决方案的回答。

【讨论】:

  • 谢谢。我得到“语言级别'7'不支持方法引用”。
  • @pizza 抱歉,忘了说,java 8 中引入了方法引用,请参考 Code-Apprentice 对 java 7 编译解决方案的回答
  • @pizza,这个答案最重要的部分首先是Double[]
  • @M.Prokhorov 是的,我的错!
  • 请注意,Collection#toArray(IntFunction) 是在 Java 11 中添加的。
猜你喜欢
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
  • 2014-12-27
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多