传递给构造函数的参数中的点类是什么意思
我正在使用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/