Так, так как я буду использовать различные типы графиков я решил общее поведение в абстрактных классах:Instantiate абстрактный класс обходной путь
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
класс является абстрактным. Проблема в том, что Edges тоже абстрактны, но где equals()
и hashCode()
были переопределены, так что ребро может быть идентифицировано его узлами. Кажется ненужным сделать защитный список края или что-то еще и реализовать тот же метод getEdge()
в каждом подклассе.
Есть ли решение для этого?
Я не понимаю, зачем вам «внедрять один и тот же метод getEdge() в каждом подклассе« при любых обстоятельствах? –
Сложная формулировка. –
Потому что я хочу получить ребро из списка ребер и методов вызова. Например. Мне нужно было бы вызвать getWeightedEdge (MaxFlowGraphNode n1, MaxFlowGraphNode n2), написанный в MaxFlowGraph, который расширяет график, чтобы изменить вес на краю. – user2275809