我发现了一个我无法向自己解释的 Java 泛型的奇怪行为。
如果我尝试以下代码,我希望它应该可以工作
List<? extends Number> list = new ArrayList<>();
list.add(new Integer(2));
list.add(new Float(2.0f));
但这会导致编译器错误。
如果我将第一行更改为
List<? super Number> list = new ArrayList<>();
它适用于编译器。
谁能给我解释一下?和有什么区别?扩展和?超级?