我正在创建一个类,目前,它将各种类型的列表存储在名为genericTable
的内部对象中。每个列表(由Double
或Long
组成)都保存在一个对象中,该对象是类GenericList
的一个实例。
问题:为什么方法addVector
不起作用?
红色下划线下的错误显示the constructor Test<V>.GenericList<V>(List<List<V>>) is undefined
。
如果我使用main
方法(但具有相同的GenericList
类)并在main方法中创建genericTable
(使用List<GenericList<?>> Table = new ArrayList<GenericList<?>>();
)并且genericTable.add(new GenericList<Long>(Arrays.asList(genericVector)));
1}}(其中genericVector
在这种情况下是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;
}
}
}
答案 0 :(得分:4)
当您已有列表时,您不必使用Arrays.asList()。因此,您将获得一个列表列表,这不是constructr接受的列表。
从javadocs中看到这一点:
此方法还提供了创建固定大小列表的便捷方法 初始化为包含几个元素:
List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
因此,在您的情况下,您将获得一个列表列表,而不是字符串列表。
为了清楚起见,我在评论中添加了这一位:
asList()的方法签名如下: -
public static <T> List<T> asList(T... a)
因为T ... a是一个vararg,当你传入“Larry”,“Moe”,“Curly”时,编译的方法实际上会接收一个["Larry", "Moe", "Curly"]
数组,并将它们作为List返回
因为你传入的是List而不是数组,所以该方法采用如下的vararg数组:[genericVector],并将该数组作为列表返回,并且构造函数会中断。