我正在忙着编写修改图形的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);
}