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."
传递给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."