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のエッジしか作成できないように見えます。したがって、グラフには値12の頂点が1つしかありません。この推論は正確ですか?

4

2 に答える 2

2

あなたはこれを非常に複雑にしすぎています。

Factoryは、オブジェクトを生成するクラスの単なるインターフェースです。実装するのは簡単です。

InstantiationFactoryは必要ありません。自分で書いてください。例えば:

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

0から始まる昇順でvertexFactory.create()一連のオブジェクトを生成するための連続した呼び出し。Integer

必要なファクトリの特定の性質は、頂点オブジェクトに必要なプロパティ(存在する場合)によって異なりますが、実際には気にしない場合があります。そうしていて、List頂点に使用したいオブジェクトが(たとえば)ある場合、Factoryインスタンスはそのリストを使用できます。

アドホックにグラフを生成する、または(静的に保存されたグラフではなく)グラフジェネレーターを使用するJUNGの例はすべて、Factoryインスタンスを使用します。彼らはいたるところにいます。

于 2012-10-11T04:32:57.230 に答える
1

その外観(つまりJavadoccreate )から、これは新しいインスタンスを作成するメソッドを定義するインターフェースです。

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 に答える