Можно ли использовать наследование с JGraph - PullRequest
0 голосов
/ 10 июня 2019

У меня есть граф, объявленный как

Graph<MyBase, DefaultEdge> myGraph = new DefaultGraph<MyBase, DefaultEdge>();

Я хочу иметь возможность сохранить граф и ребра и заменить типы базовых классов вершинами подтипами, что-то вроде

for (Mybase mybase : myGraph.vertexSet()) {
   mybase = mySubType;
}

Но я не думаю, что это работает, тип вершин остается MyBase.Это то, что я могу достичь с помощью jGraph?Кажется, что следующее не работает

public static <Object, DefaultEdge> void replaceVertex(
      Graph<MyBase, org.jgrapht.graph.DefaultEdge> graph, MyBase vertex,
      MyBase replace) {

    graph.addVertex(replace);
    for (org.jgrapht.graph.DefaultEdge edge : graph.outgoingEdgesOf(vertex))
      graph.addEdge(replace, graph.getEdgeTarget(edge), edge);
    for (org.jgrapht.graph.DefaultEdge edge : graph.incomingEdgesOf(vertex))
      graph.addEdge(graph.getEdgeSource(edge), replace, edge);
    graph.removeVertex(vertex);


  }

Когда replace является типом базового класса, это прекрасно работает, когда replace является подтипом, тогда вершина теряется.Как я могу сделать эту работу?

1 Ответ

0 голосов
/ 10 июня 2019
Graph<Number,DefaultEdge> g = new DefaultGraph<>(DefaultEdge.class);
Double mydouble=new Double(5.0);
Integer myInteger=new Integer(4);
g.add(myDouble);
g.add(myInteger);

Это прекрасно работает: здесь тип вершины - это супер тип Integer и Double.

...