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

标签 java generics hashmap overriding

我创建了一个 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/

相关文章:

用于桌面开发的 Java IDE

java - 使用小程序单击按钮时打印图像?

java - T 扩展 Comparable<T>

c# - 构造匿名类型和嵌套循环的通用列表

Java:多次将元素从 Hashmap 添加到 vector

java - Class#getClassLoader 什么时候返回 null?

java - 无法显示高分辨率 PNG 图像

java - 如何从HashMap中获取玩家列表

java - AssertJ `containsExactly` 带有通配符的断言列表

vector - rust 是否可以为不同的数据结构提供统一的 Iterator 接口(interface)?