DefaultEdge.class 在 jgrapht 示例中是什么意思

what does DefaultEdge.class mean in jgrapht example

传递给Constructor的参数中的点class是什么意思

我是第一次使用 jgrapht。我有这个问题

我们将什么传递给 DefaultDirectedGraph class 的构造函数? 我的意思是 DefaultEdge.class 是什么意思? class 中没有同名的静态字段。我的意思是实际传递给 class 的构造函数的是什么。点 class 是什么意思?

DirectedGraph<String, DefaultEdge> g =
            new DefaultDirectedGraph<String, DefaultEdge>(DefaultEdge.class);

如果问题只针对语法,你可能需要参考The .class Syntax部分Retrieving Class Objects from the oracle documentation. In general DefaultEdge.class is an object that represents the class DefaultEdge. This is an object of the type java.lang.Class,并包含有关 class 本身的信息 - 例如,此 class 包含哪些字段和方法。

在这种情况下,这个 Class 对象由 jgrapht 在内部使用,以创建边缘实例。当调用 Graph#addEdge(V,V) 方法时,此 Class 对象将在内部用于创建边缘 - 特别是创建 DefaultEdge 实例。

有多种可能的方法可以准确地做到这一点,但它要么归结为调用 Class#newInstance(), or to obtaining a Constructor from the given Class and invoking 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),简单地告诉他:"Whenever I want to add a new edge, then create a new instance of this edge class."