[英]Wildcard and mutator methods
当看到以下片段时,我感到非常困惑:
class Animal {}
class Dog extends Animal {}
public class Test {
public static void main(String[] args) {
List<? super Animal> list = new ArrayList<>();
list.add(new Dog()); //it's OK
list.add(new Animal()); //and this is OK too
}
}
为什么允许这样的事情? 当我将列表更改为List<? super Dog> list = new ArrayList<>();
List<? super Dog> list = new ArrayList<>();
list.add(new Animal());
发生编译时错误 使用extends
通配符时,所有组合都会导致错误。 谁能说出这种行为的确切原因? 提前致谢。
List<? super Animal> list = new ArrayList<>();
list.add(new Dog()); //it's OK
list.add(new Animal()); //and this is OK too
上面的代码应被允许:因为狗也是动物。
List<? super Dog> list = new ArrayList<>();
list.add(new Dog()); //it's OK
list.add(new Animal()); //error
上面的代码是错误的,应该再次出现,因为不是每只动物都是狗。
inheritance
就是这么简单。 :)
注意:要完成答案,请参阅:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.