我正在忙着编写修改图形的API。为了控制向API用户展示的内容,我使用了接口。

公开将使用的方法的接口如下。本质上,这是用户将看到的内容:

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()方法。

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

最佳答案

您当前的模型不起作用。您可以使AbstractNode接口仅包含有关该节点的信息,并且GraphEditor接口包含编辑图形所需的所有方法:

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);
}

10-06 06:56