我查看了问题q1、q2、q3,但它们并没有完全涵盖我的问题。
请注意,ArrayList<A> and 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)?
如果这是正确的,是否还有其他两种表达方式实际上不同的情况?
谢谢,