Java 为什么不在读取集合时使用超级通配符
在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()
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