Защищенное? методы getSource и getTarget в классе JGraphT DefaultEdge

Методы getSource() и getTarget() DefaultEdge на org.jgrapht.graph.DefaultEdge защищены.

Как мне получить доступ к исходным и целевым вершинам каждого из ребер, возвращаемых edgeSet() org.jgrapht.graph.SimpleGraph?

В приведенном ниже коде показано, что происходит.

import java.util.Set;

import org.jgrapht.UndirectedGraph;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.SimpleGraph;

public class TestEdges
{
    public static void main(String [] args)
    {
        UndirectedGraph<String, DefaultEdge> g =
            new SimpleGraph<String, DefaultEdge>(DefaultEdge.class);

        String A = "A";
        String B = "B";
        String C = "C";

        // add the vertices
        g.addVertex(A);
        g.addVertex(B);
        g.addVertex(C);

        g.addEdge(A, B);
        g.addEdge(B, C);
        g.addEdge(A, C);

        Set<DefaultEdge> edges = g.edgeSet();

        for(DefaultEdge edge : edges) {
            String v1   = edge.getSource(); // Error getSource() is protected method
            String v2   = edge.getTarget(); // Error getTarget() is protected method
        }
    }
}

Ответы

Ответ 1

"Правильный" метод доступа к источникам и целевому объекту ребер в соответствии с списком рассылки JGraphT заключается в использовании метода getEdgeSource(E) и getEdgeTarget(E) из интерфейса Interface Graph<V,E> org.jgrapht

модификация кода тогда

for(DefaultEdge edge : edges) {
   String v1   = g.getEdgeSource(edge);
   String v2   = g.getEdgeTarget(edge);
}

Ответ 2

У меня возникла аналогичная проблема при попытке извлечь значения ребер и, хотя это не случай OP, может оказаться полезной для всех, кто сталкивается с этой проблемой.

Когда я создал экземпляр своего графа и передал ему класс edge:

DirectedGraph graph = new SimpleDirectedGraph(DefaultEdge.class);

Netbeans предоставил мне возможность импортировать файл DefaultEdge.class, я выбрал неверный. Я использовал org.jgraph библиотеку вместо org.jgrapht.

Если вы используете класс DefaultEdge, убедитесь, что вы используете его из jgrapht.

import org.jgrapht.graph.DefaultEdge;