我有一个名为“模块”的课程
public abstract class Module {
protected Map<String, Port> ports;
...
public Map<String, Port> getPorts() {
return ports;
}
}
和一个名为 Design 的类,它是 Module 的子类
public class Design extends Module{
...
//want to do this but doesn't compile
@override
public Map<String, Port> getPorts() {
return (Map<String, TopPort>) ports; //TopPort is a subclass of Port
}
}
基本上我想做的只是将 TopPorts 添加到 Design 中,并在从 getPorts() 函数返回时已经转换类型。
我现在正在做的是在 getPorts 函数在 main 中返回后将 Ports 转换为 TopPorts,但这非常有限,在我的代码上构建的人将无法立即理解 TopPort 何时返回。
我还尝试创建另一个函数而不是重写 getPorts()
//want to do this as well but doesn't compile
public Map<String, TopPort> getTopPorts() {
return (Map<String, TopPort>) ports; //TopPort is a subclass of Port
}
这样做的正确方法是什么?
更具体的问题
我一直在研究代码,我可以将其添加到我的“设计”类中:
public TopPort getTopPortByName(String porName) {
return (TopPort) ports.get(porName);
}
public void addPort(TopPort port) {
this.ports.put(port.getName(), port);
}
然而,每当我尝试进行此转换时,它都不起作用:
return (Map<String, TopPort>) this.ports;
为什么类型转换不能在整个映射上工作,即使它在它的每个成员上都有效?