如何调用采用“Collection <! - ?extends T - >”参数的方法?

时间:2013-09-18 23:58:12

标签: java

方法签名如下所示:

            public void addThemAll(Collection<? extends T> c)

这基本上只是将集合的每个元素添加到我的LinkedList中。但我一直在尝试将此方法提供给数组或链接列表,但我总是遇到错误。例如:

            double[] myarray = new double[]{3.4, 4.5, 8.6};
            mylist.addThemAll(myarray);

我确信这是直截了当的,但我找不到一个只是将数组/链接列表传递给这样的方法的在线示例。

3 个答案:

答案 0 :(得分:4)

您的代码有两个问题:

  1. 数组不是集合。它不会扩展Collection。因此,您无法将其传递给签名指定集合参数的方法。
  2. 您尚未定义&lt; T&gt; (或者,至少,你没有告诉我们你在哪里定义&lt; T&gt;)。您可以定义&lt; T&gt;在你的班级或你的方法签名。
  3. 要在课堂上定义,请按以下步骤进行:

    public class MyClass<T> {
        // contents
    }
    

    定义&lt; T&gt;在你的方法中,这样做:

    public <T> void addThemAll(Collection<? extends T> c) {
        // method logic
    }
    

答案 1 :(得分:0)

对于你正在做的事情,这将有效:

List<Double> myArray = Arrays.asList(3.4, 4.5, 8.6);
mylist.addThemAll(myarray);

原因是你传入一个列表(这是一个集合)。目前您传入的是一个不是集合的Array。

答案 2 :(得分:0)

将数组传递给集合:

Double[] myarray = new Double[]{3.4, 4.5, 8.6};
        mylist.addThemAll(Arrays.asList(myarray));

如果您不希望它作为列表但希望它作为LinkedList或等

LinkedList<Double> linkedlist = new LinkedList(Arrays.asList(myarray));
mylist.addThemAll(linkedlist);

如果你想使用set或treeset

TreeSet <Double> treeset = new TreeSet(linkedlist);

集合和列表之间的区别在于集合没有重复且没有排序,列表是有序但包含重复。

传递给您的方法后:

public void addThemAll(Collection<? extends T> c)
if(c instanceof LinkedList){
LinkedList a = (LinkedList) c //you can invoke methods from LinkedList
....
}