gpt4 book ai didi

java - 为什么这个使用泛型的构造函数会失败?

转载 作者:行者123 更新时间:2023-12-01 18:42:50 24 4
gpt4 key购买 nike

我正在创建一个类,目前将各种类型的列表存储在名为 genericTable 的内部对象中。 。每个列表(由 DoubleLong 组成)都保存在一个对象中,该对象是类 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 在本例中是 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;
}
}
}

最佳答案

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

从 javadocs 中查看:

This method also provides a convenient way to create a fixed-size list initialized to contain several elements:

 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"],并将它们作为列表返回。

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

关于java - 为什么这个使用泛型的构造函数会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19210041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com