3 回答
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”。
TA贡献1831条经验 获得超4个赞
该currentSumPairs
和sumPair
是的类型List<int[]>
。该.add()
方法需要int[]
。你不能添加List<int[]>
代替int[]
它们不一样。
我认为你正在寻找addAll(...)
方法。
currentSumPairs.addAll(sumPair);
添加回答
举报