15

根据仿制药试验

本节规定:

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

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

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

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

4

3 回答 3

6

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

说的重点

MyClass<A>和的共同父项MyClass<B>Object

A只是为了说明这两种类型都不是另一种的父级,无论和之间的关系如何B

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

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

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

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

于 2012-10-29T12:30:03.993 回答
4

在教程的第一个引用之后,它立即说:

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

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

所以,虽然我确实认为它具有误导性并且措辞不是很好,但我会将第一个读作

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

于 2012-10-29T12:29:14.100 回答
1

谈论参数化类型的单个“父级”并不是很有用。重要的是一件事是否是另一件事的超类型。当然,ObjectMyClass<A>and的常见超类型MyClass<B>MyClass<?>. 如果 A 和 B 是 Integer 和 Number,那么MyClass<? extends Number>也是一个常见的超类型;也是MyClass<? extends Serializable>

于 2012-10-29T20:04:55.560 回答