泛型类父级

2022-09-03 15:23:41

根据仿制药试验

本节指出:

给定两个具体类型 A 和 B(例如,数字和整数),无论 A 和 B 是否相关,都与 没有关系。和 的公共父级是 对象。MyClass<A>MyClass<B>MyClass<A>MyClass<B>

然而,在这里我们被告知,

虽然 Integer 是 Number 的子类型,但不是 的子类型,实际上,这两种类型并不相关。和 的共同父级是 。List<Integer>List<Number>List<Number>List<Integer>List<?>

为什么在第一个示例中/的父级不是?有什么区别?MyClass<A>MyClass<B>MyClass<?>


答案 1

我认为答案是相当微不足道的。虽然 和 的正确父级确实是 ,但本教程在那里做了一个小的简化,因为通配符还没有被引入。MyClass<A>MyClass<B>MyClass<?>

说的要点

和 的共同父级是 。MyClass<A>MyClass<B>Object

只是为了清楚地表明,无论 和 之间的关系如何,这两种类型都不是另一种类型的父母。AB

您的第一个报价正下方的以下评论证实了这一点:

有关如何在类型参数相关时在两个泛型类之间创建类似子类型的关系的信息,请参见通配符和子类型。

以及通配符和子类型一章的介绍:

如泛型、继承和子类型中所述,泛型类或接口不相关,仅仅是因为它们的类型之间存在关系。但是,您可以使用通配符在泛型类或接口之间创建关系。


答案 2

紧接着教程中的第一句话,它说:

有关如何在类型参数相关时在两个泛型类之间创建类似子类型的关系的信息,请参见通配符和子类型。

这是指向您的第二个报价的链接。

所以,尽管我确实认为它具有误导性并且措辞不太好,但我会将第一个阅读为

MyClass 和 MyClass 的常见父级将是 Object,如果不是因为我们能够执行以下链接中描述的通配符/子类型


推荐