java - 为什么迭代接收到的通用 HashMap 只能通过增强的 for 循环来完成?

标签 java generics

我正在实现一个 putAll() 方法。 我尝试使用 entrySet 和迭代器方法迭代 map ,但收到编译错误 m.entrySet().iterator()返回值无法转换为 Iterator<Entry<? extends K, ? extends V>> . 为什么?如果 map 是那种类型,它的迭代器也应该是那种类型,不是吗?

谢谢! 不编译:

@Override
public void putAll(Map<? extends K, ? extends V> m) {       
        Iterator<Entry<? extends K, ? extends V>> iter = m.entrySet().iterator();

    while (iter.hasNext()) {
        Entry<? extends K, ? extends V> entry = iter.next();
        put(entry.getKey(), entry.getValue());
    }
}

编译并工作正常:

@Override
public void putAll(Map<? extends K, ? extends V> m) {
    Objects.requireNonNull(m, "putAll(): argument is null");

    for (Entry<? extends K, ? extends V> entry : m.entrySet()) {
        put(entry.getKey(), entry.getValue());
    }
}

最佳答案

改变

Iterator<Entry<? extends K, ? extends V>> iter

Iterator<? extends Entry<? extends K, ? extends V>> iter

关于java - 为什么迭代接收到的通用 HashMap 只能通过增强的 for 循环来完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55398858/

相关文章:

java - REST API AWS云使用java

Java,正则表达式,去除不需要的字符[尾随、前导、之间]

java - Java 中的 'Null pointer access' 有问题

java - 返回类型是删除的一部分吗?

java - 如何为 Maven 项目运行集成测试用例

Java 泛型 : Syntax Explanation

java - 为什么为非泛型方法或构造函数提供显式类型参数会编译?

java - 使用通用返回类型重写方法,不发出警告

java - 为什么 "cannot select from a type variable"

java - 无法为类型为 org.gradle.api.publication.maven.internal.deployer.DefaultGroovyMavenDeployer 的对象获取未知属性 'GROUP'