java - jgrapht 示例中的 DefaultEdge.class 意味着什么

标签 java parameters constructor jgrapht

传递给构造函数的参数中的点类是什么意思

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

我们要传递给 DefaultDirectedGraph 类的构造函数什么? 我的意思是 DefaultEdge.class 是什么意思?该类中没有具有该名称的静态字段。我的意思是实际传递给该类的构造函数的内容。那里的点类是什么意思?

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

最佳答案

如果问题仅针对语法,您可能需要引用该网站关于 Retrieving Class Objects.class 语法部分。来自oracle文档。一般来说,DefaultEdge.class 是一个代表 DefaultEdge 类的对象。这是 java.lang.Class 类型的对象,并包含有关类本身的信息 - 例如,该类包含哪些字段和方法。

在本例中,jgrapht 在内部使用此 Class 对象来创建边的实例。当 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),简单地告诉他:“每当我想添加一条新边,然后创建该边类的一个新实例。”

关于java - jgrapht 示例中的 DefaultEdge.class 意味着什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30750236/

相关文章:

PHP - db2_bind_param 描述参数失败

java - 如何在retrofit2中设置参数列表

C++构造函数和析构函数顺序

c++ - 在编译时检测是否存在默认构造函数

java - 读取txt文件并在分割操作后打印不打印数组值

java - 在 Spring Controller 上执行 $.ajax POST 后收到错误请求错误 (400)

java - 如何使用 Netbeans 将选项传递给 jar 文件

java - ArrayList 如何从构造函数中捕获一项的异常

java - 如何从 2 个不同的数组列表中对数组列表进行排序?就像两个数组列表,性别和学生。如何按性别查看学生详细信息

java - 当使用排序数组时,修复并编写 private static void sort