gpt4 book ai didi

java - 在子类java中更改类变量类型

转载 作者:搜寻专家 更新时间:2023-11-01 03:04:29 25 4
gpt4 key购买 nike

我有一个名为“模块”的类

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 添加到设计中,并在从 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;

为什么类型转换不适用于整个 map ,即使它适用于其每个成员?

最佳答案

您需要使您的类通用。

public abstract class Module<P extends Port> {

protected Map<String, P> ports;

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


class Design extends Module<TopPort> { }

不过,我不确定这是否有点矫枉过正。

关于java - 在子类java中更改类变量类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27436592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com