0

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

  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 的顶点。这个推理准确吗?

4

2 回答 2

2

你做的太复杂了。

工厂只是生成对象的类的接口。实施起来很简单。

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

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

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

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

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

于 2012-10-11T04:32:57.230 回答
1

从它的外观(即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"
于 2012-10-09T01:37:35.497 回答