Automobile
- Bus
- Minibus
- Doubledecker
- Electricbus
- Car
- Sedan
- Hatchback
- Coupe
- Truck
- Minivan
- Pickuptruck
- Suv
- Fullsuv
- Midsuv
现在我正在尝试构建一个(灵活的)列表,并向其中添加不同类型的对象。
import java.util.ArrayList;
import java.util.List;
public class Garage {
public static void main(String[] args)
{
List<? super Suv> list = null;
Suv s = new Suv();
Truck t = new Truck();
Automobile a = new Automobile();
list = new ArrayList<Suv>();
list.add(s); // declared as List<? super Suv> but actually List<Suv>. No compilation error
list = new ArrayList<Truck>();
list.add(t); // declared as List<? super Suv> but actually List<Truck>. Compilation error
list = new ArrayList<Automobile>();
list.add(a); // declared as List<? super Suv> but actually List<Automobile>. Compilation error
}
}
我可以将SUV
的实例添加到List<?超级SUV>
。但是,当我试图将Truck
或Automobile
的实例添加到同一个列表中时,会出现编译错误。列表不是<吗?super SUV>
是否足够灵活,可以使用SUV
或其超级类的任何实例?卡车
和汽车
在层次结构树中位于较高位置。为什么我不能将这些实例添加到列表中?
<代码>列表<?super SUV>应读为“其元素类型为SUV
超级类型的列表”。
现在,让我们来看看这两行:
list = new ArrayList<Automobile>();
list.add(a); // where a is an Automobile
第一行可以,因为ArrayList
实际上是“一个列表,其元素类型是SUV
的超级类型”。
null 为什么我不能在MyList中添加对象。因为如果我们使用super,这意味着这个列表可以包含在Java类的继承制度中等于或高于number的对象。因此应该按照该语句在列表中添加新的Object()。 多谢了。
为什么会出现这种情况?请跟我解释一下。
上限通配符下限通配符 有人能帮我理解一下吗?
这个问题的答案表明,当方法采用通配符泛型类型时,可以访问或修改集合,但不能同时访问或修改集合。(凯西和伯特) 据我所知,方法do1有,因此d2只能被访问,不能被修改。方法d2具有,因此可以访问和修改c2,并且没有编译错误。 通用指南
考虑以下示例: 我知道下界通配符接受通配符中给定类的所有超类(这里是IOException)。 为什么在上述情况下编译器会显示编译错误?
问题内容: 您好直接从Oracle http://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html提供的Java教程中 我知道编译时的类型擦除。而且我也知道,一个类型(无界)将被Object取代。知道在编译时如何使用无界通配符进行编译吗?只是删除它,因为它是原始类型? 提前致谢。 问题答案: 假设我们有一个