假设我们有2个不同的列表。列表泛型协变
列表1可以接受任何Number参数(包括int,double,float和Number的子类的其他所有内容)。
List<Number> l1 = new ArrayList();
因此,这样做的作品非常好。
l1.add(123);
l1.add(123.3456);
List 2 extends Number。问题是我不能添加任何东西,我不明白为什么。另外,为什么我会需要一个列表<?扩展Something>而不是仅仅创建一个层次最高的类的列表,可以存储任何子类(如列表1)?
List<? extends Number> l2 = new ArrayList();
l2.add(123); //Error, although Integer is a subclass of Number
l2.add(new Integer(123)); // Wrappers don't work either
l2.add(123.456); //Error again
查找术语PECS(生产者延伸,超级消费者)。 Java方差“声明”是在使用时完成的,而不是类定义时间 –