Java 在哪里可以使用ArrayList<?扩展我的课程>;
我们在哪里可以Java 在哪里可以使用ArrayList<?扩展我的课程>;,java,generics,Java,Generics,我们在哪里可以ArrayList描述这些关键词的广泛使用的首字母缩略词是:PECS:Producer extends-consumer super 因此,如果使用“扩展”,则集合将生成给定类型的元素。所以你不能增加它,你只能从中获取 示例用法是向API的客户端提供一个列表: public List<? extends CharSequence> getFoo() { List<String> list = new ArrayList<String>()
ArrayList描述这些关键词的广泛使用的首字母缩略词是:PECS:Producer extends-consumer super
因此,如果使用“扩展”,则集合将生成给定类型的元素。所以你不能增加它,你只能从中获取
示例用法是向API的客户端提供一个列表:
public List<? extends CharSequence> getFoo() {
List<String> list = new ArrayList<String>();
list.add("foo");
return list;
}
public List您是对的,您的ArrayList
不能按其派生方式使用:您无法将任何内容放入其中
存储My_类及其子类所需的是ArrayList
;它将正确地获取My_Class
的对象及其所有DerivedClass
。好吧……没有人会像这样声明ArrayList,相反,您的意图将通过编写来实现
ArrayListobj=新的ArrayList()
根据我的eXercience,我在方法参数中看到了这个概念,您希望调用方提供特定超类型的子类型集合(或者像上面所说的那样从方法返回)。如下
public getAnimals(List< ? extends Animal> obj){
obj.add(something); //not allowed
}
publicGetAnimals(列表<?扩展动物>obj){
obj.add(某物);//不允许
}
你很有可能会把驴、猴子和鸟等添加到你的特定类型的列表中,比如说(猴子)。从中获取classCastException
这就是为什么在这种情况下是不允许的。阅读Josh Bloch的有效Java。他用生产者消费者类比法(PECS)很好地解释了这一点。Ahm。。。什么?是的,这正是我在某些情况下想要的。假设驴、猴子和鸟都来自动物,那么。。。将它们存储在阵列列表中有什么问题??而且。。。潜在的灾难在哪里?我不认为自己会如此愚蠢。很抱歉..请参考更新的回答我们试图从中获得的好处是什么我不理解,因为此方法的调用方还应该定义一个类型为ListReplicate的变量
public getAnimals(List< ? extends Animal> obj){
obj.add(something); //not allowed
}