我有一个有两个端口的连接器。两个端口的公共根为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;
}
答案 0 :(得分:4)
TreeSet
对Comparable
元素进行排序,因此您需要确保您的元素实现Comparable
如果您无法访问Element
的源代码,则可以在TreeSet
的构造函数中传递Comparator
的实例
答案 1 :(得分:4)
如果不需要对要素进行排序,请使用HashSet
代替TreeSet
。 HashSet
未排序,不需要可比较的元素。
答案 2 :(得分:0)
TreeSet
是一个有序集。您添加到object
的任何TreeSet
都应实现Comparable
接口。见Java docs for add method on treeset
答案 3 :(得分:0)
您的Element
必须实施Comparable
界面。