Java 为什么不在读取集合时使用超级通配符

Java 为什么不在读取集合时使用超级通配符,java,Java,在Java中,据说使用“扩展通配符”读取数据结构,并使用“超级通配符”将内容放入其中。我能理解第一个,但不能理解后一个 第一个(用户扩展通配符以获取)是可以理解的: Class B --extends--> Class A Class C --extends--> Class A public static void doSomething(List<? extends A> list, int index) { list.set(0, new ClassC()

在Java中,据说使用“扩展通配符”读取数据结构,并使用“超级通配符”将内容放入其中。我能理解第一个,但不能理解后一个

第一个(用户扩展通配符以获取)是可以理解的:

Class B --extends--> Class A
Class C --extends--> Class A

public static void doSomething(List<? extends A> list, int index) {
    list.set(0, new ClassC());
}
B类--扩展-->A类
类C—扩展-->类A

公共静态无效数据(列表由于类型擦除…什么是
?如果通配符
系列的一部分…如何确定
呢?此时我们需要
未定义。这是类型擦除的典型目标问题

想象一下这样的情况:

必须是
类的一部分

根据前面的例子,我们知道我们使用的是java语言,该语言使用类型擦除,因为编译时它会被擦除

我们知道,投诉后,绑定到(MyFavoriteTreeOfClasses)的范围…但当处理纯擦除类型中的时,这是编译后的对象…当处理左侧赋值时



所以?的最低形式是一个接口,即MyFavoriteTreeOfClasses


…因为
MyTreeInTheFavorites
扩展了它…它不是
,因为对象没有实现
myfavoritetreeofclass

带有
super
的通配符用于类的超类而不是子类。您是如何从
列表中读取的?它是
对象o=list.get(0)
A o=list.get(0)
?尝试查看编译错误。当我使用
对象时,没有编译错误。问题是您无法从
列表中读取
A
? extends MyFavoriteTreeOfClasses = Object