【问题标题】:What does Collection <? extends myObject> means? [duplicate]什么是集合<?扩展 myObject> 是什么意思? [复制]
【发布时间】:2015-01-08 08:45:51
【问题描述】:

我在我的 java 书上寻找解释,但没有找到。我正在互联网上寻找一篇文章,但我没有找到任何明确的内容。

Collection &lt;? extends myObject&gt; 是否意味着我可以将 myObject 和扩展 myObject 的对象都放入 Collection 中?还有什么意思吗?

【问题讨论】:

标签: java


【解决方案1】:

表示任何对象都可以替换?a-kind-of关系或myObject的子类,其中myObject可以是classinterface

例如:

class Doctor{}

class GeneralDoctor extends Doctor{}

class Dentist extends Doctor{}

那么,Collection&lt;? extends Doctor&gt; doctors; 将只接受 Doctor 的孩子(即 GeneralDoctorDentist

【讨论】:

    【解决方案2】:

    Collection &lt;? extends myObject&gt; 是否意味着我可以将 myObject 和扩展 myObject 的对象都放入 Collection 中?

    并非如此 - 这意味着该集合是扩展 myObject 的某些特定类型的集合。举一个更清楚的例子,如果你有一个Collection&lt;? extends Number&gt;,它可能是一个Collection&lt;Integer&gt;,也可能是一个Collection&lt;Double&gt;,或者可能是一个Collection&lt;Number&gt;,但你不知道是哪个。

    因此,您无法向该集合添加任何内容,因为您不知道它的泛型类型是什么。但是,如果您从该集合中获取元素,则可以确定它是 Number

    List<? extends Number> c = getList();
    Number n = c.get(0); //ok
    c.add(1); //not ok, c could well be a List<BigDecimal>, we don't know
    

    【讨论】:

    • 感谢您的明确解释。如果你有时间,我还有一个问题。如果我不能做 c.add(1),这意味着我不能以编程方式创建一个 Collection 然后填充它。这是否意味着我可以使用 只是作为方法的参数?
    • 您可以在不需要知道集合的确切类型的地方使用它。但通常你会在方法返回该类型时使用它(例如,基于我的示例:public Collection&lt;? extends Number&gt; getList() {...})。
    【解决方案3】:

    它被称为泛型方法。这整个概念在 Java 中称为“泛型”。该声明意味着 T 可以是 myObject 子类的任何类型

    【讨论】:

      猜你喜欢
      • 2017-06-29
      • 2012-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 2015-07-15
      • 2018-07-17
      相关资源
      最近更新 更多