![](/img/trans.png)
[英]NoClassDefFoundError with SwallowedExceptionListener in apache.commons
[英]How to use Factory from apache.commons?
java代码在org.apache.commons.collections15.Factory
中的用途是什么
Factory<Integer>
和Factory<String>
? 这是我的代码,它仅输出一个顶点。
Factory<Graph<String, Integer>> graphFactory = SparseGraph.getFactory();
Integer[] ints = {1};
String[] strs = {"12"};
Class[] typesStr = {String.class};
Class[] typesInt = {int.class};
Factory<String> vertexFactory = InstantiateFactory.getInstance(String.class, typesStr, strs);
Factory<Integer> edgeFactory = InstantiateFactory.getInstance(Integer.class, typesInt, ints);
HashSet<String> seedVertices = new HashSet();
for(int i = 0; i < 10; i++)
{
seedVertices.add("v"+i);
}
BarabasiAlbertGenerator<String, Integer> barabasiGen = new
BarabasiAlbertGenerator<String,Integer>(graphFactory, vertexFactory,
edgeFactory, seedVertices.size(), 1, seedVertices);
Graph g = barabasiGen.create();
我认为我的问题与我的vertexFactory和edgeFactory有关。 在我看来,我的vertexFactory只能创建值为12的顶点,而我的edgeFactory只能创建值为1的边。因此,该图形将只有1个值为12的顶点。这是否正确?
您正在做的事情太复杂了。
Factory只是用于生成对象的类的接口。 实施起来很简单。
您不需要InstantiationFactory。 只需自己编写即可。 例如:
Factory<Integer> vertexFactory =
new Factory<Integer>() {
int count;
public Integer create() {
return count++;
}};
连续调用vertexFactory.create()
以从0开始的vertexFactory.create()
生成一系列Integer
对象。
您想要的Factory的特定性质将取决于您希望顶点对象具有哪些属性(如果有),但是您实际上可能并不在意。 如果这样做,并且您拥有(例如)要用于顶点的对象List
,则Factory
实例可以使用该列表。
任何临时生成图或使用图生成器(而不是静态保存的图)的JUNG示例都将使用Factory
实例。 他们无处不在。
从它的外观(即Javadoc )来看,它是一个接口,它定义了一个create
新实例的create
方法:
java.lang.Object create()
创建一个新对象。
返回:一个新对象
如何使用它实例化类型为Object的对象:
Factory<Integer>
,Factory<String>
?
实际上,您将使用Factory<Integer>
实例化一个Integer(而不是另一个Factory)。
例如
Factory<Integer> factory = ConstantFactory.getInstance(123);
Integer oneTwoThree = factory.create(); // will give you the Integer "123"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.