我想定义一个自定义边
public class Connection extends DefaultWeightedEdge
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用时,super()这可能吗?创建图形时应为EdgeFactory使用什么?
new SimpleWeightedGraph<Sensor, Connection>(EdgeFactory.class);
Run Code Online (Sandbox Code Playgroud)
这样就足够了吗?还是我应该创建一个新的扩展类EdgeFactory?
您不需要子类DefaultWeightedEdge来创建自定义边缘,以下方法也可以。我当前正在使用JGraphT的0.9.0版本。
类定义:
public class Connection {
// class implementation
// define all constructors and methods you need
}
Run Code Online (Sandbox Code Playgroud)
图形创建:
SimpleWeightedGraph<Sensor, Connection> graph;
graph = new SimpleWeightedGraph<Sensor, Connection>(Connection.class);
Run Code Online (Sandbox Code Playgroud)
添加自定义边缘并设置权重:
Sensor v1 = // sensor instance
Sensor v2 = // another sensor instance
graph.addVertex(v1);
graph.addVertex(v2);
Connection connection = new Connection(/* ... */);
graph.addEdge(v1, v2, connection);
graph.setEdgeWeight(connection, 10.0);
Run Code Online (Sandbox Code Playgroud)
另外还要考虑到实现equals和hashCode你的方法Connection类,因为0.8.4版本JGraphT依靠这些方法,请参阅EqualsAndHashCode文章。本文还提供了一个DefaultWeightedEdge子类化的示例。