根据 泛型试用,这一部分指出:
给定两个具体类型 A 和 B(例如 Number 和 Integer),无论 A 和 B 是否相关,MyClass<A> 都与 MyClass<B> 没有关系。 MyClass<A> 和 MyClass<B> 的共同父类是 Object。
然而,我们在这里被告知:
虽然 Integer 是 Number 的子类型,但 List<Integer> 不是 List<Number> 的子类型,并且实际上这两种类型没有关系。List<Number> 和 List<Integer> 的共同父类是 List<?>。
为什么第一个示例中 MyClass<A> / MyClass<B> 的父类不是 MyClass<?>?有何区别?
给定两个具体类型 A 和 B(例如 Number 和 Integer),无论 A 和 B 是否相关,MyClass<A> 都与 MyClass<B> 没有关系。 MyClass<A> 和 MyClass<B> 的共同父类是 Object。
然而,我们在这里被告知:
虽然 Integer 是 Number 的子类型,但 List<Integer> 不是 List<Number> 的子类型,并且实际上这两种类型没有关系。List<Number> 和 List<Integer> 的共同父类是 List<?>。
为什么第一个示例中 MyClass<A> / MyClass<B> 的父类不是 MyClass<?>?有何区别?
?
的列表意味着可以是任何类型的列表。 - Amit DeshpandeMyClass<A>
和MyClass<B>
并不像它所述的那样相关
,但在运行时,两者都变成了MyClass<Object>
,因此在运行时它们是相互可转换的(这可能会导致糟糕的结果)。 - John B