因此,由于我将使用各种类型的图表,我决定将常见行为放在抽象类中:
public abstract class Graph {
private List<Node> nodes;
private List<Edge> edges;
public void addNode(Node n) {
nodes.add(n);
}
public void addEdge(Edge e) {
edges.add(e);
}
public Node getNode(Node n) {
return nodes.get(nodes.indexOf(n));
}
public Edge getEdge(Node left, Node right) {
return edges.get(edges.indexOf(new Edge(left, right)));
}
}
getNode()
即使Node
类是抽象的,也不会抱怨(还)。问题是边也是抽象的,但是在哪里equals()
和hashCode()
已被覆盖,以便可以通过其节点识别边。似乎没有必要使边缘列表受保护或其他东西并getEdge()
在每个子类中实现相同的方法。
有解决方案吗?