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