addAll(Collection)..不适用于参数(Iterable)

Mer*_*rni 0 java generics overriding hashmap

我创建了一个HashSet类,它在Java中扩展了HashSet.如果我只添加一个元素,代码就可以了.但是当我使用addAll时,它表明以下内容:

The method addAll(Collection<? extends Number>) in the type MyHashSet<Number> is not applicable for the arguments (Iterable<Integer>)
Run Code Online (Sandbox Code Playgroud)

是什么原因,我怎么能绕过它呢?

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);
}
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*nik 5

声明integers

Collection<Integer> integers;
Run Code Online (Sandbox Code Playgroud)

因为addAll不支持任意Iterables.这是由于历史原因,Iterable是一个改进的界面,方法签名无法在没有破损的情况下进行更改.