gpt4 book ai didi

java - 将扩展与 Java 泛型一起使用

转载 作者:行者123 更新时间:2023-12-03 19:34:39 25 4
gpt4 key购买 nike

假设我有以下代码:

public class Shelter<A extends Animal, B extends Animal>
{
List<A> topFloor = new Vector<A>();
List<B> bottomFloor = new Vector<B>();

public A getFirstTopFloorAnimal(){return topFloor.get(0);}
public B getFirstBottomFloorAnimal(){return bottomFloor.get(0);}

//These 3 methods compile but when I try to use it, they all only return objects
public List<Animal> getAnimals()
{
List<Animal> a = new Vector<Animal>(topFloor);
a.addAll(bottomFloor);
return a;
}

public List<A> getTopFloor(){return topFloor;}
public List<B> getBottomFloor(){return bottomFloor;}
}

然后我尝试做如下的事情:

for(Animal a : shelter.getTopFloor()){
a.growl();
}

但是我的编译器错误,我得到的错误是 A 是一个对象,而不是动物。如果我尝试使用其他方法,也会发生同样的情况。任何想法为什么会这样?这是否与 List<String> 有关?不是 List<Object>泛型教程中的想法?

谢谢

最佳答案

泛型只是一个编译时概念,目的是提高类型安全性。

您不能使用它们来过滤在运行时添加到集合中的值。您必须手动进行过滤(例如使用 instanceOf)

例如,这会起作用并让您添加一个Date:

List<String> list = new ArrayList<String>();
((List) list).add(new Date());

因此,解决您的(我们尚未发现的)问题的方法是在添加元素时不使用原始类型。

关于java - 将扩展与 Java 泛型一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2662333/

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