我想定义一条自定义边
public class Connection extends DefaultWeightedEdge
但是当我尝试使用 super()
时,这可能吗?创建图形时我应该为 EdgeFactory 使用什么?
new SimpleWeightedGraph<Sensor, Connection>(EdgeFactory.class);
这就足够了吗?还是我应该创建一个扩展 EdgeFactory
的新类?
最佳答案
您不需要子类化 DefaultWeightedEdge
来创建您的自定义边,以下也适用。我目前使用的是 JGraphT 的 0.9.0 版。
类定义:
public class Connection {
// class implementation
// define all constructors and methods you need
}
图形创建:
SimpleWeightedGraph<Sensor, Connection> graph;
graph = new SimpleWeightedGraph<Sensor, Connection>(Connection.class);
添加自定义边和设置权重:
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);
还要考虑实现 Connection
类的 equals
和 hashCode
方法,因为 JGraphT 从 0.8.4 版本开始就依赖这些方法,请参阅EqualsAndHashCode文章。本文还提供了一个示例,其中 DefaultWeightedEdge
被子类化。
关于java - 使用 jgrapht 自定义边缘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24384223/