受保护的? JGraphT DefaultEdge类上的getSource和getTarget方法

时间:2013-01-12 18:18:17

标签: jgrapht

org.jgrapht.graph.DefaultEdge DefaultEdge 的方法getSource()getTarget()受到保护。

如何访问 org.jgrapht.graph.SimpleGraph edgeSet()返回的每条边的源顶点和目标顶点?

下面的代码显示了正在发生的事情。

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
        }
    }
}

2 个答案:

答案 0 :(得分:25)

根据JGraphT mailing list访问边缘源和目标的“正确”方法是使用接口getEdgeSource(E)中的方法getEdgeTarget(E)Interface Graph<V,E> org.jgrapht

然后

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

答案 1 :(得分:1)

在尝试提取边缘值时遇到类似问题,虽然不是OP的情况,但对于遇到此问题的其他人可能会有所帮助。

当我实例化我的图表并将其传递给边缘类时:

DirectedGraph graph = new SimpleDirectedGraph(DefaultEdge.class);

Netbeans给了我选择导入 DefaultEdge.class 文件的选项,我选错了。我使用 org.jgraph 库而不是 org.jgrapht

如果您使用的是DefaultEdge类,请确保使用的是jgrapht。

import org.jgrapht.graph.DefaultEdge;