没有合适的添加方法

我正在运行以下代码。但是当我这样做时我收到了这个错误currentSumPairs.add(sumPair)


List<List<Integer>> quadrupules = new ArrayList<List<Integer>>();

Map<Integer, List<int[]>> pairs = new HashMap<Integer, List<int[]>>();      

List<int[]> sumPair = new ArrayList<int[]>();


sumPair.add(new int[]{1, 2});


if (pairs.containsKey(0)) {

    List<int[]> currentSumPairs = pairs.get(0);

    currentSumPairs.add(sumPair);

    pairs.put(0, currentSumPairs);

} else {    

    pairs.put(0, sumPair);

这给出了以下错误:


没有找到适合 add(List) 的方法


慕斯709654
浏览 149回答 3
3回答

呼啦一阵风

由于 sumPair 是一个列表,它应该是currentSumPairs.addAll(sumPair);

小怪兽爱吃肉

小加成使用泛型与数组,例如List<int[]>,非常不兼容,因此非常不鼓励,因为它可能导致灾难性的结果。这可能会导致您真的不想遇到的所有类型的错误和失败。正如 Joshua Bloch 在他的书“Effective Java”中提到的,至少数组和泛型的任何组合都是不需要的,因为它们有很大的不同。首先,数组是协变的。[..] 相比之下,泛型是不变的。例如说到数组,这是一段完全合法的代码,它会顺利编译。但是如果您尝试SubObject在数组中持久化,它会在运行时失败。&nbsp;&nbsp;&nbsp;&nbsp;SuperObject[]&nbsp;arrayOfCustomObjects&nbsp;=&nbsp;new&nbsp;SubObject[1]&nbsp;//&nbsp;Fails&nbsp;at&nbsp;runtime,&nbsp;throws&nbsp;ArrayStoreException在这种情况下List,泛型是不变的,不会让创建子类型的列表实例在编译时失败。它必须是完全相同的类型。&nbsp;&nbsp;&nbsp;List<SuperObject>&nbsp;listOfCustomObjects&nbsp;=&nbsp;new&nbsp;ArrayList<SubObject>&nbsp;//&nbsp;Won't&nbsp;compile,&nbsp;must&nbsp;be&nbsp;the&nbsp;same&nbsp;types,&nbsp;fail-fast数组被具体化。这意味着数组在运行时知道并强制执行它们的元素类型。[..]相比之下,泛型是通过擦除实现的。这意味着它们仅在编译时强制执行它们的类型约束,并在运行时丢弃(或擦除)它们的元素类型信息。擦除允许泛型类型与不使用泛型的遗留代码自由互操作,确保在 Java 5 中平滑过渡到泛型。由于这些根本差异,数组和泛型不能很好地混合。例如,创建泛型类型、参数化类型或类型参数的数组是非法的。Joshua Bloch,“Effective Java”(第 3 版)有关更多信息,请查看“Effective Java”。

慕容708150

该currentSumPairs和sumPair是的类型List<int[]>。该.add()方法需要int[]。你不能添加List<int[]>代替int[]它们不一样。我认为你正在寻找addAll(...)方法。currentSumPairs.addAll(sumPair);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java