MyClass不能转换为java.lang.Comparable:java.lang.ClassCastException [英] MyClass cannot be cast to java.lang.Comparable: java.lang.ClassCastException

查看:228
本文介绍了MyClass不能转换为java.lang.Comparable:java.lang.ClassCastException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我的项目中的类(简化):

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

  public class Item {

private String itemID;
私人整数价格;

public Integer getPrice(){

return this.price;

}

}

public class Store {

private String storeID;
private String address;

}

public class Stock {

private Item item;
私人店铺;
private整数itemCount;

public Integer getInventoryValue(){

return this.item.getPrice()* this.itemCount;

}
}

然后我尝试排序一个 ArrayList 的股票,所以我创建另一个类叫$ code> CompareByValue

  public class CompareByValue implements Comparator< Stock> {

@Override
public int compare(stock stock1,stock stock2){

return(stock1.getInventoryValue() - stock2.getInventoryValue());

}

}



当我尝试运行程序时,会出现错误:


线程main中的异常java.lang.ClassCastException任何人都知道有什么问题?/ b>


=h2_lin>解决方案

这是因为库存不实现可比较的。实现它:

  public class库存实现可比较&库存> {
public int compareTo(Stock o){
// ...
}
}

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

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


I am doing a java project and I got this problem and don't know how to fix it.

The classes in my project (simplified):

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;

    }  
}

Then I try to sort an ArrayList of Stock so I create another class called CompareByValue

public class CompareByValue implements Comparator<Stock> {

    @Override
    public int compare(Stock stock1, Stock stock2) {

        return (stock1.getInventoryValue() - stock2.getInventoryValue());

    }

}

When I try to run the program, it gives the error:

Exception in thread "main" java.lang.ClassCastException: Stock cannot be cast to java.lang.Comparable

Anyone know what's wrong?

解决方案

It's because Stock isn't implementing Comparable. Either implement it:

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

... Or pass an instance of CompareByValue as parameter to the sort() method:

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

这篇关于MyClass不能转换为java.lang.Comparable:java.lang.ClassCastException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆