MyClass无法强制转换为java.lang.Comparable:java.lang.ClassCastException

我正在做一个java项目,我遇到了这个问题,不知道如何解决它。

我项目中的类(简化):

public class Item { private String itemID; private Integer price; public Integer getPrice() { return this.price; } } public class Store { private String storeID; private String address; } public class Stock { private Item item; private Store store; private Integer itemCount; public Integer getInventoryValue() { return this.item.getPrice() * this.itemCount; } } 

然后我尝试排序Stock的ArrayList ,所以我创建了另一个名为CompareByValue

 public class CompareByValue implements Comparator { @Override public int compare(Stock stock1, Stock stock2) { return (stock1.getInventoryValue() - stock2.getInventoryValue()); } 

}

当我尝试运行该程序时,它会给出错误:

线程“main”中的exceptionjava.lang.ClassCastException:Stock无法强制转换为java.lang.Comparable

谁知道什么是错的?

这是因为Stock没有实现Comparable 。 实现它:

 public class Stock implements Comparable { public int compareTo(Stock o) { // ... } } 

…或者将CompareByValue的实例作为参数传递给sort()方法:

 Collections.sort(list, new CompareByValue()); 

只有从上面的代码,它看起来很好。 你确定上面代码的例外吗? 如果您只是将Stock对象放入任何已排序的集合中,您将看到此类exception并需要实现Comparable接口。

但是对于只通过自定义Comparator的情况,您不需要使Stock成为Comparable。 就像你给匿名的Comparator实现一样。

将比较器设置为像TreeSet这样的已排序集合,然后将stock对象添加到sorted集合中,它应该可以在不实现Comparable接口的情况下工作。