List<? extends MyClass>
和有什么区别List<MyClass>
。不都意味着我有一个包含对象的列表MyClass
吗?
问问题
157 次
3 回答
4
它们是有区别的。AList<? extends MyClass>
可以指 a List<MySubClass>
,它与 a 不同List<MyClass>
。此外, aList<MySubClass>
不是 a List<MyClass>
,因为 Java 泛型不是协变的。
因为编译器不知道通配符实际上是哪个子类,所以它会阻止您调用add
,以保持类型安全。
于 2013-09-19T00:04:43.737 回答
1
List<? extends MyClass>
,当在方法中接受时,会为您提供一个列表,该列表不能为类型安全添加内容,但实际上可以很好地阅读。由于我们不知道MyClass
列表的哪个子类实际上是,我们不能添加MyClass
. 请注意,由于缺乏协方差,这X extends Y
并不意味着。Foo<X> extends Foo<Y>
因为List<MyClass>
你可以很好地读写它。
于 2013-09-19T00:04:59.320 回答
0
GenericClass<? extends T> g
允许您对以下方法使用通用返回类型GenericClass
:
T item = g.get(0)
GenericClass<? super T> g
允许您为以下方法使用通用参数类型GenericClass
:
T item;
g.set(0, item)
于 2013-09-19T00:12:27.677 回答