さまざまなタイプのグラフを使用するので、一般的な動作を抽象クラスに入れることにしました。
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)));
}
}
クラスがabstractgetNode()
であっても、(まだ)文句を言いません。Node
問題は、エッジも抽象的ですが、ノードによってエッジを識別できるように と がオーバーライドされていることですequals()
。エッジ リストを保護するなどして、すべてのサブクラスhashCode()
に同じメソッドを実装する必要はないようです。getEdge()
これに対する解決策はありますか?