【问题标题】:Generics - Type mismatch when providing a concrete type to a generic class泛型 - 向泛型类提供具体类型时的类型不匹配
【发布时间】:2010-10-06 14:59:20
【问题描述】:

简单的 Java 泛型问题:我有两个类 - 其中一个使用泛型定义其类型,另一个扩展此类提供具体类型。

public class Box<Item> {
    ...
}


public class Toolbox extends Box<Tool>{
    ...
}

鉴于 Toolbox 扩展了 Box 提供了一个 Tool 作为通用占位符的实际类型,我原以为应该可以做这样的事情:

Box<Tool> box = new Box();

Toolbox toolbox = box; 

但是,这似乎会导致类型不匹配。这是为什么呢?

【问题讨论】:

    标签: java generics inheritance type-mismatch


    【解决方案1】:

    这不是一个真正的泛型问题。您的问题是您将一个不太具体的类型的对象分配给一个更具体的类型的变量。

    如果您尝试将 Object 分配给 String 变量,即使 String 扩展 Object,也会遇到同样的问题。

    但是,您应该能够使用给定的类结构编写Box&lt;Tool&gt; box = new Toolbox();。只是不是相反。

    【讨论】:

    • 当然。干杯...今天有点金发的时刻;)
    【解决方案2】:

    Box&lt;Item&gt; 是未绑定的泛型类型。 Box&lt;Tool&gt; 是同一泛型类型的特定绑定版本。 ToolboxBox&lt;Tool&gt; 的子类,因此是 Box&lt;Tool&gt; 的离散类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      相关资源
      最近更新 更多