1

List<? extends MyClass>和有什么区别List<MyClass>。不都意味着我有一个包含对象的列表MyClass吗?

4

3 回答 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 回答