我创建了一个 HashSet 类,它扩展了 Java 中的 HashSet。如果我只添加一个元素,代码就可以了。但是当我使用 addAll 时,它会显示以下内容:
The method addAll(Collection<? extends Number>) in the type MyHashSet<Number> is not applicable for the arguments (Iterable<Integer>)
原因是什么?我该如何解决?
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
public class MyHashSet<E> extends HashSet<E> {
private int count;
public int Count() {
return count;
}
@Override public boolean add(E e) {
count++;
return super.add(e);
}
@Override public boolean addAll(Collection<? extends E> c) {
count += c.size();
return super.addAll(c);
}
public static void main(String[] args) {
MyHashSet<Number> hs = new MyHashSet<>();
hs.add(new Integer(1));
Iterable<Integer> integers = new ArrayList<Integer>(Arrays.asList(1,3,5,7,9));
hs.addAll(integers);
}
}
最佳答案
声明整数
为
Collection<Integer> integers;
因为addAll
不支持任意Iterable
。这是由于历史原因,Iterable
是一个改进的接口(interface),并且方法签名无法在不破坏的情况下更改。
关于java - addAll(Collection).. 不适用于参数(Iterable),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23011518/