【问题标题】:In Java type arguments, does <? extends E> mean strictly subtypes only? or would E also suffice?在 Java 类型参数中,<? extends E> 仅表示严格的子类型?还是E也足够了?
【发布时间】:2011-03-09 09:04:36
【问题描述】:

在 Java 类型参数中,是否仅指严格的子类型?还是 E 也足够了?

【问题讨论】:

    标签: java generics super extends bounded-types


    【解决方案1】:

    这并不严格; E 就足够了。

    【讨论】:

    • 我猜反之亦然?即 super E> 并不严格,也可以表示 E。谢谢!
    • 是的,E 满足 也是如此。
    【解决方案2】:
    List<? extends Animal> animalList=new List<Dog>();
    List<? extends Animal> animalList=new List<Animal>();
    

    这两行都编译没有任何错误。 任何以列表为参数的函数都理解列表中的对象是 E 类型或 E 的子类型。

    【讨论】:

      【解决方案3】:

      是的,superextends 分别给出了包容性的下限和上限。

      这是来自Angelika Langer's Generics FAQ的引述:

      什么是有界通配符?

      具有上限的通配符类似于? extends Type,代表所有类型的家族,它们是Type 的子类型,类型Type包含Type 被称为上限

      具有下界的通配符看起来像? super Type,代表所有类型的家族,它们是Type的超类型,类型Type包含 . Type 被称为下界

      【讨论】:

      • 这并不反映我的观察。如果我编写接受&lt;T extends E&gt; 的方法,如果我尝试传递 E 实例,则会出错。
      • @TomášZato:答案是正确的;例如:ideone.com/hRZFlu。建议删除评论(并将其标记为已过时)。如果您有一个似乎不起作用的特定示例,您可能想发布一个关于此的问题,它可能是相似但不同的东西。 :-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-16
      • 2020-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多