给定两个具体类型A和B(例如,数字和整数),
MyClass<A>
与MyClass<B>
无关,无论A和B是否相关。MyClass<A>
和MyClass<B>
的共同父级是Object。
然而,here我们被告知,
虽然Integer是Number的子类型,但
List<Integer>
不是List<Number>
的子类型,事实上,这两种类型不相关。List<Number>
和List<Integer>
的共同父母是List<?>
。
为什么第一个示例MyClass<A>
中的MyClass<B>
/ MyClass<?>
的父级不是?有什么区别?
答案 0 :(得分:6)
我认为答案是微不足道的。虽然MyClass<A>
和MyClass<B>
的正确父级确实是MyClass<?>
,但教程在那里进行了一些简化,因为尚未引入通配符。
说点
MyClass<A>
和MyClass<B>
的共同父母是Object
。
只是要清楚地表明,无论A
和B
之间的关系如何,这两种类型都不是另一种类型的父类。
您的第一句话下面的以下评论证实了这一点:
有关如何在类型参数相关时在两个泛型类之间创建类似子类型关系的信息,请参阅通配符和子类型。
以及章节Wildcards and Subtyping的介绍:
如泛型,继承和子类型中所述,泛型类或接口仅仅因为它们的类型之间存在关系而无关。但是,您可以使用通配符在泛型类或接口之间创建关系。
答案 1 :(得分:4)
在教程的第一个引用之后,它立即说:
有关如何在两者之间创建类似子类型的关系的信息 类型参数相关时的两个泛型类,请参阅通配符 和Subtyping。
这是第二个引用的链接。
所以,尽管我确实认为它具有误导性且措辞不够好,但我会把第一个看作是
MyClass和MyClass 的公共父级将是 Object,如果 它不是我们能够进行以下链接中描述的通配符/子类型
答案 2 :(得分:1)
讨论参数化类型的单个“父”并不是很有用。重要的是一件事是否是另一件事的超类型。当然,Object
是MyClass<A>
和MyClass<B>
的常见超类型,MyClass<?>
也是如此。如果A和B是整数和数,那么MyClass<? extends Number>
也是常见的超类型; MyClass<? extends Serializable>
也是如此。