我真的不明白为什么编译器不允许我执行以下操作...
import java.util.HashMap;
import java.util.Map;
public class TestMap {
private final Map<Integer, ? extends Number> map = new HashMap<Integer, Number>();
public void put(Integer key, Long item) {
this.map.put(key, item);
}
}
为什么代码this.map.put(key, item)
导致编译错误?
我知道我可以将map的声明更改为使用Number
而不是? extends Number
来使其正常工作,但在我看来,我所做的事情是完全合法的,并且我更倾向于不允许在map中使用Number对象。我正在使用Java 1.6.0_13。
? extends Number
将允许 Number 对象。? extends X
有界通配符意味着“X 或 X 的子类”。 - Pesto