繁体   English   中英

如何从apache.commons使用Factory?

[英]How to use Factory from apache.commons?

java代码在org.apache.commons.collections15.Factory中的用途是什么

  1. 是否有文档(我找不到有用的东西)
  2. 在Java Jung图形包的BarabasiAlbertGenerator的构造函数中,如何使用它实例化类型为Object的对象: Factory<Integer>Factory<String>
  3. 如何获得功能正常的BarabasiAlbertGenerator。

这是我的代码,它仅输出一个顶点。

    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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM