我离开 Java 已有十多年了,在我把它放在一边之前,我几乎没有遇到过泛型。我回来处理练习题,遇到了一个我无法理解的错误。
最小的例子:
Set<Set<Integer>> powerSet = new HashSet<Set<Integer>>();
Set<Integer> nthSizeSubset = new HashSet<Integer>();
powerSet.addAll(nthSizeSubset);
在 Eclipse 中产生错误:
Set 类型中的方法 addAll(Collection)
不适用于参数 (Set)
我不确定类型是否可以扩展自身,但无论哪种方式,我都不知道如何理解错误并修复它。
addAll
时,请使用
Collection
。但你的参数化类型是Set<Integer>
。因此,尝试将 addAll
a Set<Integer>
转换为 Set<Set<Integer>>
是行不通的,因为它期待类似 Collection<Set<Integer>>
的内容。但你只给了Set<Integer>
。因此,参数无效。
泛型的指路明灯是类型参数。它决定数据、方法以及容纳这两者的类之间的关系。每当您阅读 Javadocs 时,请始终考虑类型参数。