在传递给构造函数
的参数中,dot类的含义是什么我第一次使用jgrapht。我有这个问题
我们传递给DefaultDirectedGraph类的构造函数是什么? 我的意思是DefaultEdge.class是什么意思?该类中没有具有该名称的静态字段。我的意思是实际传递给该类的构造函数。点类意味着什么?
DirectedGraph<String, DefaultEdge> g =
new DefaultDirectedGraph<String, DefaultEdge>(DefaultEdge.class);
答案 0 :(得分:2)
如果问题仅针对语法,您可能需要参考oracle文档中有关Retrieving Class Objects的网站的 .class语法部分。通常,DefaultEdge.class
是表示类DefaultEdge
的对象。这是java.lang.Class
类型的对象,包含有关类本身的信息 - 例如,此类包含的字段和方法。
在这种情况下,这个Class
对象在内部由jgrapht使用,以便创建边缘实例。调用Graph#addEdge(V,V)
方法时,将在内部使用此Class
对象创建边缘 - 尤其是创建DefaultEdge
实例。
有多种可能的方法可以完全实现,但它可以归结为调用Class#newInstance()
,或从给定的Constructor
获取Class
并调用{{ 3}},将给定的顶点作为参数传递。
响应评论进行了扩展:
对于DefaultDirectedGraph
的特定情况,边缘的创建是使用EdgeFactory
完成的 - 一个简单的Constructor#newInstance(...)
,可以从两个顶点创建边实例。该工厂用于addEdge
方法:
@Override public E addEdge(V sourceVertex, V targetVertex)
{
...
E e = edgeFactory.createEdge(sourceVertex, targetVertex);
...
}
此EdgeFactory
是在构造函数中创建的,来自给定的Class
对象(可能是DefaultEdge.class
,如示例所示):
public DefaultDirectedGraph(Class<? extends E> edgeClass)
{
this(new ClassBasedEdgeFactory<V, E>(edgeClass));
}
反过来,ClassBasedEdgeFactory
执行我已经提到的内容:它使用给定的Class
对象来创建新实例:
public class ClassBasedEdgeFactory<V, E> implements EdgeFactory<V, E>, ...
{
...
private final Class<? extends E> edgeClass;
public ClassBasedEdgeFactory(Class<? extends E> edgeClass)
{
this.edgeClass = edgeClass;
}
...
@Override public E createEdge(V source, V target)
{
try {
return edgeClass.newInstance();
} catch (Exception ex) {
throw new RuntimeException("Edge factory failed", ex);
}
}
}
总而言之:可以将Class
传递给图构造函数(例如,DefaultEdge.class
),只需告诉他:“每当我想添加新边缘,然后创建一个新的这个边缘类的实例。“