简单的Java通用问题:我有两个类 - 其中一个使用仿制药来定义其类型,另一个使用该类型,该类别扩展了此类提供具体类型。

public class Box<Item> {
    ...
}


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

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

Box<Tool> box = new Box();

Toolbox toolbox = box; 

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

有帮助吗?

解决方案

Box<Item> 是未结合的通用类型。 Box<Tool> 是同一通用类型的特定绑定版本。 ToolboxBox<Tool> 因此是一种离散类型 Box<Tool>.

其他提示

这并不是真正的仿制问题。您的问题是,您正在为更特定类型的变量分配一个较少特定类型的对象。

如果您尝试将对象分配给字符串变量,即使String扩展了对象,也会遇到相同的问题。

但是,您应该能够写 Box<Tool> box = new Toolbox(); 带有班级结构。只是不相反。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top