在子类Java中更改类变量类型

布林兹

我有一堂课叫做“模块”

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
    }

正确的方法是什么?


更具体的问题

我一直在玩这些代码,可以在“ Design”类中添加此代码:

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;

为什么类型转换即使在其每个成员上都有效,但在整个地图上仍不起作用?

提洛

您需要使您的类通用。

public abstract class Module<P extends Port> {

   protected Map<String, P> ports;

   public Map<String, P> getPorts() {
      return ports;
   }
}


class Design extends Module<TopPort> { }

不过,我不确定这是否不是矫over过正。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章