为了账号安全,请及时绑定邮箱和手机立即绑定

没有合适的添加方法

没有合适的添加方法

慕斯709654 2021-11-24 19:04:09
我正在运行以下代码。但是当我这样做时我收到了这个错误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) 的方法
查看完整描述

3 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

由于 sumPair 是一个列表,它应该是

currentSumPairs.addAll(sumPair);


查看完整回答
反对 回复 2021-11-24
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

小加成

使用泛型与数组,例如List<int[]>,非常不兼容,因此非常不鼓励,因为它可能导致灾难性的结果。这可能会导致您真的不想遇到的所有类型的错误和失败。

正如 Joshua Bloch 在他的书“Effective Java”中提到的,至少数组和泛型的任何组合都是不需要的,因为它们有很大的不同。

首先,数组是协变的。[..] 相比之下,泛型是不变的。

例如

说到数组,这是一段完全合法的代码,它会顺利编译。但是如果您尝试SubObject在数组中持久化,它会在运行时失败。

    SuperObject[] arrayOfCustomObjects = new SubObject[1] // Fails at runtime, throws ArrayStoreException

在这种情况下List,泛型是不变的,不会让创建子类型的列表实例在编译时失败。它必须是完全相同的类型。

   List<SuperObject> listOfCustomObjects = new ArrayList<SubObject> // Won't compile, must be the same types, fail-fast

数组被具体化。这意味着数组在运行时知道并强制执行它们的元素类型。[..]

相比之下,泛型是通过擦除实现的。这意味着它们仅在编译时强制执行它们的类型约束,并在运行时丢弃(或擦除)它们的元素类型信息。擦除允许泛型类型与不使用泛型的遗留代码自由互操作,确保在 Java 5 中平滑过渡到泛型。

由于这些根本差异,数组和泛型不能很好地混合。例如,创建泛型类型、参数化类型或类型参数的数组是非法的。

Joshua Bloch,“Effective Java”(第 3 版)

有关更多信息,请查看“Effective Java”


查看完整回答
反对 回复 2021-11-24
?
慕容708150

TA贡献1831条经验 获得超4个赞

currentSumPairssumPair是的类型List<int[]>。该.add()方法需要int[]。你不能添加List<int[]>代替int[]它们不一样。

我认为你正在寻找addAll(...)方法。

currentSumPairs.addAll(sumPair);


查看完整回答
反对 回复 2021-11-24
  • 3 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信