如果问题只针对语法,你可能想请参考该网站的的.class语法有关从Oracle文档Retrieving Class Objects。通常,DefaultEdge.class
是表示类别DefaultEdge
的对象。这是类型为java.lang.Class
的对象,并且包含有关类本身的信息 - 例如,此类包含哪些字段和方法。
在这种情况下,这个Class
对象在内部由jgrapht使用,以创建边的实例。当调用Graph#addEdge(V,V)
方法时,此Class
对象将在内部用于创建边缘 - 特别是创建DefaultEdge
实例。
有各种可能的方式如何,可以准确地完成,但它要么归结为调用Class#newInstance()
,或从给定的Class
获得Constructor
和调用Constructor#newInstance(...)
,通过给定的顶点作为参数。
响应注释扩展: - 一个简单的Factory从两个顶点创建边缘情况下
对于DefaultDirectedGraph
的特殊情况下,边缘的创建与EdgeFactory
完成。这个工厂在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
),简单地告诉他:“每当我想添加一个新的边缘,然后建立这个边缘类的新实例。 “
差不多你能解释一下最后一段多细细点 –
@ysaditya最后一段扩展了一下 – Marco13
完全清楚了!!! –