0

我正在创建一个类,目前该类将各种类型的列表存储在一个名为genericTable. 每个列表(由Double或组成Long)都保存在一个对象中,该对象是 class 的一个实例GenericList

问题:为什么方法addVector不起作用?

红色下划线下的错误表示the constructor Test<V>.GenericList<V>(List<List<V>>) is undefined

如果我在一个main方法中工作(但具有相同的GenericList类)并genericTable在 main 方法中创建(使用List<GenericList<?>> Table = new ArrayList<GenericList<?>>();)并做了genericTable.add(new GenericList<Long>(Arrays.asList(genericVector)));genericVector在这种情况下是 a List<Long>),它可以完美地工作。

public class Test<V> {

    private final List<GenericList<?>> genericTable = new ArrayList<GenericList<?>>();

    public void addVector(List<V> genericVector) {
        genericTable.add(new GenericList<V>(Arrays.asList(genericVector)));
    }

    private class GenericList<K> {
        private final List<K> listGeneric;    

        public GenericList(List<K> input) {
           listGeneric = input;
        }
    }
}
4

1 回答 1

4

当您已经有一个列表时,您不必要地使用 Arrays.asList()。因此,您会得到一个列表列表,这不是构造函数接受的。

从 javadocs 看到这个:

此方法还提供了一种方便的方法来创建一个固定大小的列表,该列表已初始化为包含多个元素:

 List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");

因此,在您的情况下,您将获得列表列表,而不是字符串列表。

为了清楚起见,我从评论中添加了这一点:

asList() 的方法签名是这样的:-

public static <T> List<T> asList(T... a)

所以因为 T...a 是一个可变参数,当你传入“Larry”、“Moe”、“Curly”时,编译的方法实际上会接收一个 数组["Larry", "Moe", "Curly"],并将它们作为一个 List 返回。

因此,因为您传入了一个列表,而不是一个数组,所以该方法采用这样的可变参数数组:[genericVector],并将该数组作为列表返回,而您的构造函数会中断。

于 2013-10-06T14:46:18.313 回答