4

我有一个有两个端口的连接器。两个端口有一个共同的根为Resource. 我正在尝试为这两个端口找到共同的根。

我需要一组用于一个端口(p1)的元素,可以通过getParent方法找到。对于另一个端口(p2),我需要检查集合中是否存在 p2 的任何元素。虽然我需要这个方法来返回一个 type 的对象Resource,但我在这一点上有点卡住了。我收到以下错误。

加载时出现意外问题:'java.lang.ClassCastException: policy.vddl.model.Resource cannot be cast to java.lang.Comparable' java.lang.ClassCastException: vddl.model.Resource cannot be cast to java.lang.Comparable at java.util.TreeMap.compare(Unknown Source) at java.util.TreeMap.put(Unknown Source) at java.util.TreeSet.add(Unknown Source) at vddl.product.Product.findCommonRoot(Product.java:357)

private Element findCommonRoot(Connector connector)
{

    List<Port> portList = getListOfPort(connector);
    Port p1 = portList.get(0);
    Set<Element> portElementSet = new TreeSet<Element>();

    Element pathElement = p1.getParent();
    while (pathElement != null)
    {
        portElementSet.add(pathElement);
        pathElement = pathElement.getParent();
    }

    Port p2 = portList.get(1);
    Element pathElement2 = p2.getParent();

    for(Element e: portElementSet)
    {
        if(portElementSet.contains(pathElement2))
            pathElement2 = e;
    }

    return pathElement2;
}
4

4 回答 4

4

TreeSet对元素进行排序Comparable,因此您需要确保您的 Element 实现Comparable

如果您无权访问源代码,则可以在构造函数中Element传递ComparatorTreeSet

于 2012-06-13T09:45:24.023 回答
4

如果不需要对元素进行排序,HashSet请改用。未排序,不需要元素可比较。TreeSetHashSet

于 2012-06-13T09:48:10.113 回答
0

TreeSet是一个排序集。object您添加的任何内容TreeSet都应实现Comparable接口。有关树集上的添加方法,请参阅Java 文档

于 2012-06-13T09:45:44.910 回答
0

Element必须实现Comparable接口。

于 2012-06-13T09:46:45.517 回答