[英]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.