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.这个推理是否准确?
答案 0 :(得分:2)
你做得太多了,太复杂了。
Factory只是生成对象的类的接口。实施起来很简单。
您不需要InstantiationFactory。写自己的。例如:
Factory<Integer> vertexFactory =
new Factory<Integer>() {
int count;
public Integer create() {
return count++;
}};
对vertexFactory.create()
的连续调用按递增顺序生成一系列Integer
个对象,从0开始。
您想要的Factory的特定性质取决于您希望顶点对象具有哪些属性(如果有),但您可能实际上并不关心。如果你这样做,并且你有(例如)要用于顶点的List
个对象,那么你的Factory
实例可以使用该列表。
任何生成临时图形或使用图形生成器(而不是静态保存图形)的JUNG示例都将使用Factory
个实例。他们到处都是。
答案 1 :(得分:1)
从它的外观(即the Javadoc)开始,它是一个界面,用于定义创建新实例的create
方法:
java.lang.Object create()
创建一个新对象。
返回: 一个新的对象
如何使用它来实例化类型为
Factory<Integer>
,Factory<String>
的对象?
实际上,你使用Factory<Integer>
来实例化一个整数(而不是另一个工厂)。
例如
Factory<Integer> factory = ConstantFactory.getInstance(123);
Integer oneTwoThree = factory.create(); // will give you the Integer "123"