' java.lang.ClassCastException:资源无法强制转换为java.lang.Comparable'

时间:2012-06-13 09:43:51

标签: java exception

我有一个有两个端口的连接器。两个端口的公共根为Resource。我试图找到这两个端口的共同根。

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

  

加载时出现意外问题:'java.lang.ClassCastException:   policy.vddl.model.Resource无法强制转换为java.lang.Comparable'   java.lang.ClassCastException:vddl.model.Resource无法强制转换为   java.lang.Comparable在java.util.TreeMap.compare(未知来源)at   java.util.TreeMap.put(未知来源)at   java.util.TreeSet.add(未知来源)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 个答案:

答案 0 :(得分:4)

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

如果您无法访问Element的源代码,则可以在TreeSet的构造函数中传递Comparator的实例

答案 1 :(得分:4)

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

答案 2 :(得分:0)

TreeSet是一个有序集。您添加到object的任何TreeSet都应实现Comparable接口。见Java docs for add method on treeset

答案 3 :(得分:0)

您的Element必须实施Comparable界面。