【问题标题】:Confusion in generic List<> hierarchy通用 List<> 层次结构中的混淆
【发布时间】:2016-11-02 02:01:10
【问题描述】:

Wildcards and Subtyping - Oracle Documentation

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

在右侧层次结构中,List&lt;? super Number&gt;List&lt;? super Integer&gt; 的子类型。是不是很混乱?

据我解释,List&lt;? super Number&gt; 可以用任何List&lt;type&gt; 表示,其中typeNumberNumber 的超类。同样的逻辑也适用于List&lt;? super Integer&gt;。那么List&lt;? super Number&gt;怎么可能是List&lt;? super Integer&gt;的子类型呢?

【问题讨论】:

  • 所以List&lt;? super Integer&gt; 是一个列表,其中typeIntegerInteger 的超类。 NumberInteger 的超类吗?
  • 是的,Number 是 Integer 的超类
  • This 可能会有所帮助……

标签: java generics collections


【解决方案1】:

这是因为List&lt;? super Number&gt; 只能容纳Number 及其超类,而List&lt;? super Integer&gt; 可以容纳相同的+ 整数。

你可以这样想:如果项目类型更严格,那么这些项目的列表在继承层次结构中较低。您可以将List&lt;? super Number&gt; 放入List&lt;? super Integer&gt; 类型的变量中,但反之则不行。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 2020-10-24
    • 2012-02-10
    • 1970-01-01
    相关资源
    最近更新 更多