java多个嵌套通配符参数不适用
我已经大大简化了我的问题。下面是它的内容
我试图弄明白为什么下面的代码无法编译:
List<AnonType<AnonType<?>>> l = new ArrayList<AnonType<AnonType<?>>>();
l.add( new AnonType<AnonType<String>>() );
在哪里
public class AnonType<T> {
T a;
List<T> b;
}
编译器错误是add不适用于给定的参数。OTOH,以下代码只包含1级嵌套通配符,可以完美编译:
List<AnonType<?>> l = new ArrayList<AnonType<?>>();
l.add( new AnonType<String>() );
# 1 楼答案
以下内容按预期编译:
问题是泛型是类型不变的
考虑更简单的例子:
Animal
到Dog
(例如Dog extends Animal
)的强制转换。。。List<Animal>
不是AList<Dog>
List<? extends Animal>
到List<Dog>
的捕获转换下面是在这种情况下发生的情况:
Set<?>
到Set<String>
的捕获转换。。。Set<Set<?>>
不是ASet<Set<String>>
Set<? extends Set<?>>
到Set<Set<String>>
的捕获转换因此,如果你想要一个},而是
List<T>
,在那里你可以添加Set<Set<String>>
,Set<Set<Integer>>
等等,那么T
不是{Set<? extends Set<?>>
相关问题
另见