假设我有一个方法:void write(List list),我用List list调用它,write(list)并尝试像list.add(new
Dog())一样添加write(),这是编译错误,为什么?
?是泛型中的通配符运算符,现在的含义是您 不完全知道
自己
List要获得哪种类型。所以你怎么可以肯定的是它可以是一个
List的
Dog秒。如果它是a,
List<Cat>那么您的
write方法将在其中添加一个
Dog。因此Java限制您这样做。
现在,如果我使用有界通配符,则write(List list>可以解决上述问题,为什么?
? super Dog代表Dog的任何超类,包括其自身。因此,当您进入时
List<? superDog>,
write您将知道List是其中一个的列表
List<Object>orList<Dog>。在这两种情况下,将新添加
Dog到列表都是安全的。



