Rotem Linik :
I am implementing a putAll() method. I tried to iterate the map using entrySet and iterator methods, but received a compiling error that m.entrySet().iterator()
return value could not be converted to Iterator<Entry<? extends K, ? extends V>>
. why? if the map is of that type, it's iterator should be as well, no?
thank you! doesn't compile:
@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());
}
}
compiles and works fine:
@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());
}
}
Lino :
Change
Iterator<Entry<? extends K, ? extends V>> iter
To
Iterator<? extends Entry<? extends K, ? extends V>> iter