Java Jung 类型转换和 getTrees()

标签 java casting tree jung

我正在使用 Java Jung 2.01 图包进行图论中的一些分析。我的算法采用 Forest<V, E>这样我就可以转换到 DelegateForest<V,E>所以我可以使用 getTrees()获取森林组件实例的方法。我的算法是递归的,将在 getTrees() 中的每个组件上执行方法。

所以,问题是 getTrees() 的返回类型这是 Tree<V, E> 的集合由于我的算法采用 Forest<V, E> (并且在某些时候强制转换为 DelegateForest<V, E> )并且我希望在森林的每个树组件上执行我的算法,我得到一个 ClassCastException 指出我无法从 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);

此转换来 self 的算法,该算法删除树中的一个顶点,并保留该顶点的子树。这就是为什么我需要强制转换为 DelegateForest<V, E>

  1. 如何从森林中提取树木,使树木的类型为 Forest<V,E>这样我就可以向DelegateForest<V, E>求助后来没有问题吗?
  2. 我需要修改源代码吗?
  3. 还有其他想法吗?

最佳答案

您不能将 DelegateTree 转换为 DelegateForest,反之亦然,但是您可以将它们都转换为 Forest,因为它们都实现该接口(interface)。

由于您的算法采用Forest,我希望您可以使用delegateForest.getTrees()调用以下方法。由于接口(interface)上未指定两个参数 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...
}

干杯,

关于Java Jung 类型转换和 getTrees(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12973577/

相关文章:

java - ArrayList 在 Java Collection Framework 内部是如何表示的?

c# - 如何将对象值转换为类型值?

java - 为什么我必须抛出这个语句才能得到结果?

java - 使用 StringTokenizer 递归解析字符串

java - 错误 : Could not find or load main class com. mycompany.bazybazy.MainApp - 使用 JavaFX 的 Maven 项目

java - 重新创建目录结构并从 Java 中的 zip 文件的字节数组中提取文件

javascript - 如何在不丢失 javascript 结构的情况下过滤嵌套树对象?

javascript - 二叉表达式树的中缀

java - 如何在 Java Netbeans 平台模块化项目中设置 VM 选项?

java - 如何使 Wicket 口链接显示为图像?