我正在实现一个 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/