仿制药 - 为通用类提供混凝土类型时键入不匹配
-
28-09-2019 - |
题
简单的Java通用问题:我有两个类 - 其中一个使用仿制药来定义其类型,另一个使用该类型,该类别扩展了此类提供具体类型。
public class Box<Item> {
...
}
public class Toolbox extends Box<Tool>{
...
}
鉴于该工具箱扩展了为通用占位符的实际类型提供工具的框,我本来可以认为应该做这样的事情:
Box<Tool> box = new Box();
Toolbox toolbox = box;
但是,这似乎会导致类型不匹配。为什么是这样?
解决方案
Box<Item>
是未结合的通用类型。 Box<Tool>
是同一通用类型的特定绑定版本。 Toolbox
是 Box<Tool>
因此是一种离散类型 Box<Tool>
.
其他提示
这并不是真正的仿制问题。您的问题是,您正在为更特定类型的变量分配一个较少特定类型的对象。
如果您尝试将对象分配给字符串变量,即使String扩展了对象,也会遇到相同的问题。
但是,您应该能够写 Box<Tool> box = new Toolbox();
带有班级结构。只是不相反。
不隶属于 StackOverflow