【发布时间】:2012-04-15 16:58:43
【问题描述】:
我查看了q1、q2、q3 的问题,但它们并没有完全涵盖我的问题。
请注意,ArrayList<A> and ArrayList<? extends A> 用于声明变量或参数(不用于创建新的泛型类)。
在声明对象属性时,这两个表达式是否等效(案例 1)?:
class Foo {
private ArrayList<A> aList; // == ArrayList<? extends A> aList;
}
编辑:从什么的角度来看,这两个表达式是否等效
kind 对象允许添加到aList?,但不同
和下面的情况一样吗?
但是在参数声明中使用时它们是不同的(情况2)?:
void methodFoo(ArrayList<A> al) != void methodFoo(ArrayList<? extends A> al)
因为第一个只允许传递 ArrayList 对象
而第二个就像“更宽松”允许发送
ArrayList<A1> 和 ArrayList<A2>(只要 A1 和 A2 扩展 A)?
如果这是正确的,是否有任何其他情况,这两个表达式是 实际不同?
谢谢,
【问题讨论】:
-
据我所知,没有区别。