【问题标题】:java generics problem when converting from array to vector从数组转换为向量时的java泛型问题
【发布时间】:2011-06-24 22:10:37
【问题描述】:

为什么不允许这样做? arr 是一个 double[]。

Vector<Double> v = new Vector<Double>(Arrays.asList(arr));

我收到一个无法识别的构造函数错误。它认为我正在尝试使用 Vector(java.util.List&lt;double[]&gt;) 构造函数,这看起来很奇怪,因为为什么它会是一个 double[] 列表?如果我这样做,它会编译

Vector<Double> v = new Vector(Arrays.asList(arr));

但随后我收到有关未检查分配的警告

【问题讨论】:

    标签: java arrays generics vector


    【解决方案1】:

    这是因为Double 与Java 中的double 不同。

    Arrays.asList doesn't work with primitives,因此当您使用double[] 作为其第一个参数调用它时,它认为您将数组本身作为... 样式参数列表中的第一个参数传递。因此,Arrays.asList 返回一个由double[] 组成的列表,其中仅包含一个元素:您传入的double[]

    【讨论】:

      【解决方案2】:

      List&lt;double&gt; 这样的泛型不允许原始类型,这就是你的程序失败的原因。

      您需要迭代数组并逐项填写您的集合。或者您可以使用ArrayUtils.toObject() 方法将double[] 转换为Double[]。该类位于 Apache Commons 库中。

      【讨论】:

      • 那么有没有简单(无需遍历每个项目)的方法将数组转换为向量?
      • @jhlu87 添加了对可以使用的实用程序方法的引用。
      【解决方案3】:

      澄清一下,'double' 是一种原始类型,如 'int' 或 'char'。 'Double' 是一个类类型。您可以制作 的向量。将原始数组更改为 'Double's 数组,而不是 'double's。

      【讨论】:

        【解决方案4】:

        Arrays.asList(T... a) 不能按预期与原始数组一起工作,因为泛型和原始数组不能很好地相处。编译器将double[] 用于T,这就是Arrays.asList 返回List&lt;double[]&gt; 的原因。

        我认为得到你想要的最短的代码是:

        Vector<Double> v = new Vector<Double>(arr.length);
        for (double d : arr) v.add(d);
        

        【讨论】:

          猜你喜欢
          • 2020-02-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-01
          • 2011-04-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多