【问题标题】:How to use Factory from apache.commons?如何使用来自 apache.commons 的工厂?
【发布时间】:2012-10-09 01:27:55
【问题描述】:

org.apache.commons.collections15.Factory中的java代码有什么用

  1. 是否有文档(我找不到任何有用的东西)
  2. 如何在 Java Jung 图形包中的 BarabasiAlbertGenerator 的构造函数中使用它来实例化以下类型的对象: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 的顶点。这个推理准确吗?

【问题讨论】:

    标签: java factory apache-commons factory-pattern jung


    【解决方案1】:

    你做的太复杂了。

    Factory 只是生成对象的类的接口。实现起来很简单。

    您不需要 InstantiationFactory。只写你自己的。例如:

            Factory<Integer> vertexFactory = 
                new Factory<Integer>() {
                    int count;
                    public Integer create() {
                        return count++;
                }};
    

    vertexFactory.create() 的连续调用会生成一系列Integer 对象,以递增的顺序,从0 开始。

    您想要的工厂的具体性质取决于您希望顶点对象具有哪些属性(如果有),但您可能并不真正关心。如果你这样做了,并且你有(比如说)一个List 对象要用于顶点,那么你的Factory 实例可以使用该列表。

    任何临时生成图形或使用图形生成器(而不是静态保存图形)的 JUNG 示例都将使用 Factory 实例。它们无处不在。

    【讨论】:

      【解决方案2】:

      从外观上看(即the Javadoc),它是一个定义了create 方法的接口,该方法创建了一个新实例:

      java.lang.Object create()

      创建一个新对象。

      返回: 一个新对象


      如何使用它来实例化以下类型的对象:Factory&lt;Integer&gt;Factory&lt;String&gt;

      实际上,您会使用Factory&lt;Integer&gt; 来实例化一个整数(而不是另一个工厂)。

      例如

      Factory<Integer> factory = ConstantFactory.getInstance(123);
      Integer oneTwoThree = factory.create(); // will give you the Integer "123"
      

      【讨论】:

      • Use 下的更多内容。
      • 为什么要使用 ConstantFactory?
      猜你喜欢
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2013-04-16
      • 2017-05-26
      • 1970-01-01
      • 2023-03-19
      • 2016-01-04
      • 1970-01-01
      相关资源
      最近更新 更多