Java 泛型-下限/上限通配符行为?

Java 泛型-下限/上限通配符行为?,java,generics,Java,Generics,我试图理解下限通配符和上限通配符的行为 尝试编译以下代码时遇到问题 Collection<? extends Object> c = new ArrayList<Object>(); c.add(new Object()); // Compile time error Collection让我们更改类类型,使其更易于理解。您的第一个示例更改为Number Collection<? extends Number> c = new ArrayList<Nu

我试图理解下限通配符和上限通配符的行为

尝试编译以下代码时遇到问题

Collection<? extends Object> c = new ArrayList<Object>();
c.add(new Object()); // Compile time error

Collection让我们更改类类型,使其更易于理解。您的第一个示例更改为
Number

Collection<? extends Number> c = new ArrayList<Number>();
这就是为什么您不能向
添加任何内容?
表示“未知类型”


Collection@JornVernee同意它与PEC有关。关于
的部分?超级需要工作。你把大部分都倒过来了<如果绑定为
,则代码>整数
浮点
双精度
是不可能的?超级数字
@JohnKugelman,但这些类型是一个
数字
。它们不一定是超级类型。
Integer
Number
的子类<代码>?超级编号
匹配超类(或编号
本身)。
Number
的唯一超类是
Object
@JohnKugelman Yes,这些都是数字,例如,我完全理解有关
集合的部分,这就是什么?超级对象的意思是。如果A扩展了B,可以将B添加到A的集合中。这里也是一样@Yahya@JornVernee哦,这是个打字错误。我的意思是你可以在B的集合中添加A。@Sweeper谢谢,我明白你的意思了。我认为你的最后一段解释得很好。但在你的脑海里很难看清。
Collection<? extends Number> c = new ArrayList<Number>();
List<Integer> // only allows Integer
List<Double> // only allows Double
List<Float> // only allows Float
list.get(0); // is a Number, but could be a Integer
list.get(1); // is a Number, but could be a Float
list.get(2); // is a Number, but could be a Double