gpt4 book ai didi

JAVA 泛型限制了困惑

转载 作者:行者123 更新时间:2023-12-02 13:21:43 25 4
gpt4 key购买 nike

我正在尝试遵循 Oracle 文档来了解集合中的泛型、上限和下限,但它会造成困惑......

import java.util.ArrayList;
import java.util.List;

public class Test2 {

public static void main(String[] args) {


List<Dog> dogList = new ArrayList<>();
dogList.add(new Dog());
dogList.add(new Dog());

List<Cat> catList = new ArrayList<>();
catList.add(new Cat());
catList.add(new Cat());

List<Entity> entList = new ArrayList<>();
entList.add(new Entity());
entList.add(new Entity());

print(dogList);
print(catList);
print1(entList);


}

public static void print(List<? extends Animal> animals){

for(Animal an : animals){
System.out.println(an);
}
}

public static void print1(List<? super Animal> animals){
animals.add(new Animal());
animals.add(new Dog());
for(Object an : animals){
System.out.println(an);
}
}
}
class Entity {}
class Animal extends Entity{}
class Dog extends Animal {}
class Cat extends Animal {}

现在令人困惑的是,即使变量的类型是List<? super Animal> ,我可以添加狗的新实例,例如 animals.add(new Dog()) ... 为什么???另外,如果我的变量类型为 List<? extends Animal> ,它不允许我添加动物、狗或实体的实例......有什么原因吗??

最佳答案

List<? super Animal>是动物或实体或任何对象的列表,因此您可以向其中添加狗。狗既是动物又是实体。那就是

    List<Object> objList = new ArrayList<>();
objList.add(new Dog());
objList.add(new Animal());
objList.add(new Entity());
objList.add(new Object());
print1(objList);

编译时不会出现错误或警告

关于JAVA 泛型限制了困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21012648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com