gpt4 book ai didi

java - 消除类型转换的需要

转载 作者:行者123 更新时间:2023-11-29 03:02:48 27 4
gpt4 key购买 nike

我正忙于编写修改图形的 API。为了控制我向 API 用户公开的内容,我使用了接口(interface)。

暴露将要使用的方法的接口(interface)如下。本质上,这就是用户将看到的内容:

public interface GraphEditor{
Edge addEdge(AsbtractNode f, AbstractNode t)
}
public interface AbstractNode{
}
public interface ExampleNode1 extends AbstractNode{
}
public interface ExampleNode2 extends AbstractNode{
}

实现结构是:

public class GraphEditorImpl implements GraphEditor{
public Edge addEdge(AsbtractNode f, AbstractNode t){
AbstractNodeImpl from = (AbstractNodeImpl) f;
AbstractNodeImpl t = (AbstractNodeImpl) f;
from.getVertex().addEdge(t.getVertex);
}
}
public class AbstractNodeImpl implements AbstractNode{
Vertex vertex; //Must remain hidden from users
public Vertex getVertex(){
return vertex;
}
}

在图形编辑器中,我有一个方法允许用户在两​​个节点之间添加边addEdge。此方法必须将 AbstractNode 转换为 AbstractNodeImpl 才能访问获取“顶点”所需的 getVertex() 方法。

我无法在 AbstractNode 界面中公开 getVertex(),因为我无法让用户直接使用 Vertex。有没有什么方法可以实现这种功能而不必从接口(interface)强制转换为实现?

最佳答案

您当前的模型将不起作用。可以让 AbstractNode 接口(interface)只包含节点的信息,而 GraphEditor 接口(interface)包含编辑图形所需的所有方法:

interface AbstractNode {
// identify this node
// this class only contains the ID of this node
}

interface GraphEditor<T extends AbstractNode> {
// this class stores the graph
void addEdge(T a, T b);
}

关于java - 消除类型转换的需要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33805064/

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