List <! - ?之间的区别扩展MyClass - >和List <myclass> </myclass>

时间:2013-09-19 00:02:46

标签: java generics

List<? extends MyClass>List<MyClass>之间有什么区别。这两个都不是说我有一个包含MyClass对象的列表吗?

3 个答案:

答案 0 :(得分:4)

有区别。 List<? extends MyClass>可以引用List<MySubClass>,它与List<MyClass>不同。此外,List<MySubClass>不是List<MyClass>,因为Java泛型不是协变的。

因为编译器不知道通配符实际上是哪个子类,所以它阻止你调用add来保护类型安全。

答案 1 :(得分:1)

List<? extends MyClass>,当在方法中被接受时,会为您提供一个列表,该列表不能为类型安全添加内容,但实际上可以很好地阅读。由于我们不知道列表中MyClass的哪个子类实际是,我们不能添加MyClass。请注意,由于缺乏协方差,X extends Y并不意味着Foo<X> extends Foo<Y>

对于List<MyClass>,你可以很好地阅读和写作。

答案 2 :(得分:0)

GenericClass<? extends T> g允许您为GenericClass中的方法使用通用的 return 类型:

 T item = g.get(0)

GenericClass<? super T> g允许您为GenericClass中的方法使用通用参数类型:

 T item;
 g.set(0, item)