请注意,
ArrayList<A>
和 ArrayList<? extends A>
用于声明变量或参数(不是用于创建一个新的泛型类)。在声明对象属性时(情况1),这两个表达式是否等效?
class Foo {
private ArrayList<A> aList; // == ArrayList<? extends A> aList;
}
编辑:在允许添加到 aList
的对象类型方面,这两个表达式是否等价?但是与以下情况不同吗?
但是当用于参数声明(情况2)时它们是不同的吗?
void methodFoo(ArrayList<A> al) != void methodFoo(ArrayList<? extends A> al)
因为第一个只允许传递ArrayList对象,而第二个则可以"更宽松地"允许发送
ArrayList<A1>
和ArrayList<A2>
(只要A1和A2扩展了A)?如果这是正确的,是否还有其他情况下这两个表达式是有效不同的呢?
谢谢,