通用列表中的混淆<>等级制度

时间:2016-11-01 17:46:20

标签: java generics collections

Wildcards and Subtyping - Oracle Documentation

  

本文档的图表显示了使用上限和下限通配符声明的几个List类之间的关系。关系如下图所示:

Generic list hierarchy

在右侧层次结构中,List<? super Number>List<? super Integer>的子类型。这不是很困惑吗?

据我解释,List<? super Number>可由任何List<type>表示,其中typeNumber或超级Number。同样的逻辑也适用于List<? super Integer>。那么List<? super Number>如何成为List<? super Integer>的子类型?

1 个答案:

答案 0 :(得分:5)

这是因为List<? super Number>只能保留Number及其超类,而List<? super Integer>可以保存相同的+整数。

您可以这样考虑:如果项类型更具限制性,那么继承层次结构中的此类项的列表较低。您可以将List<? super Number>放入List<? super Integer>类型的变量中,但不能反过来。

查看项目类型如何相互包含,这可能会对您有所帮助:

enter image description here