如果问题仅针对语法,您可能需要参考 oracle 文档中关于 Retrieving Class Objects 的站点的 .class 语法 部分。通常DefaultEdge.class 是一个代表类DefaultEdge 的对象。这是java.lang.Class 类型的对象,包含有关类本身的信息——例如,该类包含哪些字段和方法。
在这种情况下,这个 Class 对象在 jgrapht 内部使用,以创建边的实例。当调用Graph#addEdge(V,V) 方法时,这个Class 对象将在内部用于创建一条边——特别是创建一个DefaultEdge 实例。
有多种可能的方法可以准确地完成此操作,但可以归结为调用Class#newInstance(),或者从给定的Class 获取Constructor 并调用Constructor#newInstance(...),传递给定的顶点作为参数。
为回应评论而扩展:
对于DefaultDirectedGraph 的特殊情况,边的创建是通过EdgeFactory 完成的——一个简单的Factory 从两个顶点创建边实例。这个工厂用在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),简单地告诉他:“每当我想添加新边时,就创建此边的新实例类。”