2010-10-06 102 views
1

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

public class Box<Item> { 
    ... 
} 


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

鉴于工具箱扩展盒提供了一个工具的实际类型的通用占位符,我本来以为应该可以做这样的事情:

Box<Tool> box = new Box(); 

Toolbox toolbox = box; 

但是,看来这导致类型不匹配。为什么是这样?

回答

0

Box<Item>是未绑定的泛型类型。 Box<Tool>是同一泛型类型的特定绑定版本。 ToolboxBox<Tool>的一个子类,因此是Box<Tool>的离散类型。

6

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

你最好有同样的问题,如果你试图将对象分配给一个字符串变量,即使字符串扩展对象。

你应该,但是,能写Box<Tool> box = new Toolbox();给定的类结构。而不是相反。

+0

当然。干杯......今天有一点金发的时刻;) – 2010-10-06 15:28:35