JAVA集合中的通配符
爪哇。集合中的通配符 我在理解集合中的通配符时遇到了很多困难,即使在阅读了Stack Overflow和各种教程网站中的类似文章之后也是如此。下面我举了一个非常简单的例子。你能解释一下我如何在JAVA集合中的通配符,java,collections,wildcard,Java,Collections,Wildcard,爪哇。集合中的通配符 我在理解集合中的通配符时遇到了很多困难,即使在阅读了Stack Overflow和各种教程网站中的类似文章之后也是如此。下面我举了一个非常简单的例子。你能解释一下我如何在收藏,收藏和集合 package z5; import java.util.ArrayList; public class Z5 { public static class Animal{ } public static class Mammal extends Animal{ } public st
收藏
,收藏<?扩展MyClass>
和集合?超级MyClass>
package z5;
import java.util.ArrayList;
public class Z5 {
public static class Animal{
}
public static class Mammal extends Animal{
}
public static class Reptile extends Animal{
}
public static class Lion extends Mammal{
}
public static class Tiger extends Mammal{
}
public static class Snake extends Reptile{
}
public static void main(String[] args) {
ArrayList<Mammal> catHouse1 = new ArrayList<Mammal>();
catHouse1.add(new Lion());
catHouse1.add(new Tiger());
catHouse1.add(new Mammal());
catHouse1.add(new Animal()); //ERROR
ArrayList<? super Mammal> catHouse2 = new ArrayList<Mammal>();
catHouse2.add(new Lion());
catHouse2.add(new Tiger());
catHouse2.add(new Mammal());
catHouse2.add(new Animal()); //ERROR
ArrayList<? extends Mammal> catHouse3 = new ArrayList<Mammal>();
catHouse3.add(new Lion()); //ERROR
catHouse3.add(new Tiger()); //ERROR
catHouse3.add(new Mammal()); //ERROR
catHouse3.add(new Animal()); //ERROR
ArrayList<Mammal> zooMammals = new ArrayList<Mammal>();
zooMammals.addAll(catHouse1);
zooMammals.addAll(catHouse2); //ERROR
zooMammals.addAll(catHouse3);
ArrayList<Animal> zooAnimals = new ArrayList<Animal>();
zooAnimals.addAll(catHouse1);
zooAnimals.addAll(catHouse2); //ERROR
zooAnimals.addAll(catHouse3);
}
}
z5包;
导入java.util.ArrayList;
公共类Z5{
公共静态类动物{
}
公共静态类哺乳动物扩展动物{
}
公共静态类爬行动物{
}
公共静态类{
}
公共静态类Tiger扩展哺乳动物{
}
公共静态类爬行动物{
}
公共静态void main(字符串[]args){
ArrayList catHouse1=新的ArrayList();
catHouse1.添加(新的Lion());
catHouse1.添加(新老虎());
catHouse1.添加(新哺乳动物());
catHouse1.add(新动物());//错误
ArrayList如果你只是想要一个可以包含Animal
或子类Animal
的列表,你应该使用list
。我想这是你大部分时间都需要的
扩展:
ArrayList<? extends Mammal> list = ..
在使用时,我不会详细介绍
列表
的意思是:此列表包含动物的实例。因此,您可以添加任何您想要的动物,并且从该列表中获取元素时,您一定会得到动物
List“大多数情况下,您使用这些通配符作为方法的参数。”谢谢,谢谢,谢谢。我试图通过创建特定类型的集合来理解这一点,但我找不到这样做的好理由(仍然找不到)。但我没有将其视为方法的参数类型。通配符使方法更可用,因为它允许许多不同的集合类型使用它们。因此,在我的主要方法中,包含爬行动物、哺乳动物和两栖动物的列表,以跟踪动物园中的所有内容,我应该将这些列表类型声明为它们特定的超类:List<哺乳动物>、List<爬行动物>、List<两栖动物>,等等。如果我有我想在所有动物身上使用的方法,我应该用通配符声明它们的参数:public double totalWeight(List
ArrayList<? extends Mammal> list = new ArrayList<Tiger>(); // List of type Tiger
ArrayList<? super Mammal> list = new ArrayList<Animal>(); // List of type Animal
Mammal m = list.get(0); // can't work because list can be a List<Animal>