1

Java Jung 2.01 グラフ パッケージを使用して、グラフ理論の分析を行っています。私のアルゴリズムは を取り、Forest<V, E>それから にキャストできるDelegateForest<V,E>ので、このメソッドを使用しgetTrees()てフォレストのコンポーネントのインスタンスを取得できます。私のアルゴリズムは再帰的で、getTrees()メソッドの各コンポーネントで実行されます。

したがって、問題はgetTrees()のコレクションである戻り値の型です(およびある時点で にキャストする)Tree<V, E>アルゴリズムを使用し、フォレストの各ツリー コンポーネントでアルゴリズムを実行したいので、実行できないことを示す ClassCastException を取得します。から に変換します。Forest<V, E>DelegateForest<V, E>DelegateTree<V, E>DelegateForest<V, E>

これが私のコードの一部です:ArrayList<Forest<String, Integer>> treeComps = new ArrayList<Forest<String, Integer>>(forest.getTrees());

この最初の行は、フォレストのツリー コンポーネントを ArrayList に格納するだけです。

((DelegateForest)forest).removeVertex(vertexCentralities.first().getKey(), false);

このキャストは、ツリー内の頂点を削除し、その頂点のサブツリーを保持するアルゴリズムからのものです。これがキャストが必要な理由ですDelegateForest<V, E>

  1. 後で問題なくForest<V,E>処理できるように、ツリーがタイプになるようにフォレストからツリーを抽出するにはどうすればよいですか?DelegateForest<V, E>
  2. ソースコードを変更する必要がありますか?
  3. 他のアイデアはありますか?
4

1 に答える 1

0

DelegateTreeaを a に、DelegateForestまたはその逆にキャストすることはできませんがForest、両方ともそのインターフェイスを実装しているため、両方を a にキャストできます。

あなたのアルゴリズムは を取るのでForest、次のメソッドをdelegateForest.getTrees(). また、引数が 2 つのremoveVertex(..., ...)メソッドはインターフェイスで指定されていないため、おそらく最も簡単な解決策は、 の対応するコードから着想を得て、DelegateForestそれをローカルに実装することです。

public void doAlgorithm( Collection<Tree<K,V>> trees )
{
    for ( Tree<K,V> f : tree )
    {
        // algorithm here - tree is a Forest, and likely a DelegateTree
        removeVertex( tree );
    }
}

private removeVertex( Forest forest )
{
     // As per implementation in DelegateForest...
}

乾杯、

于 2012-10-19T12:04:46.793 に答える