-2

我有这个方法:

private SortedMap<String, SpaceObjectImpl> catalog = new TreeMap<String, SpaceObjectImpl>();

public Collection<SpaceObject> getSpaceObjects(){
    SortedSet<SpaceObject> temp = new TreeSet<SpaceObject>(catalog.values());
    return temp;
}

而 compareTo 在这里定义:

public int compareTo(SpaceObjectImpl s){
    ....
}

class SpaceObjectImpl implements SpaceObject

当我运行程序时,ClassCastException被抛出。知道为什么吗?

错误:

SpaceObjectImpl cannot be cast to java.lang.Comparable(in TreeMap)
4

5 回答 5

1

SpaceObjectImpl必须实施Comparable<SpaceObjectImpl>

于 2012-12-18T10:43:26.713 回答
0

compareTo 方法在 Comparable 中定义,您的自定义类应该覆盖它以便在 TreeMap 中使用它。请在您的自定义类中实现可比较的接口

于 2012-12-18T10:37:05.580 回答
0

您已经编写了自己的compareTo()方法。您需要编写自己的compareTo(),但是需要重写,即您的类应该实现Comparable

实现此接口的对象列表(和数组)可以由 Collections.sort(和 Arrays.sort)自动排序。

于 2012-12-18T10:37:40.527 回答
0

所有排序的数据结构/集合,排序是根据它的 compareTo 方法完成的。在您的情况下,对象是用户定义的,因此默认情况下该类中没有 compareTo 方法。您必须实施

 Comparable 

并根据您的排序标准逻辑覆盖它的 compareTo 方法。

更多信息可以在http://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/找到

希望这会有所帮助。

于 2012-12-18T10:39:24.740 回答
-1

SpaceObjectImpl 必须实现Comparable接口。

以下是mkyong 的一个例子,说明了这个概念:

public class Fruit implements Comparable<Fruit>{

    private String fruitName;
    private String fruitDesc;
    private int quantity;

    public Fruit(String fruitName, String fruitDesc, int quantity) {
        super();
        this.fruitName = fruitName;
        this.fruitDesc = fruitDesc;
        this.quantity = quantity;
    }

    public String getFruitName() {
        return fruitName;
    }
    public void setFruitName(String fruitName) {
        this.fruitName = fruitName;
    }
    public String getFruitDesc() {
        return fruitDesc;
    }
    public void setFruitDesc(String fruitDesc) {
        this.fruitDesc = fruitDesc;
    }
    public int getQuantity() {
        return quantity;
    }
    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }

    public int compareTo(Fruit compareFruit) {

        int compareQuantity = ((Fruit) compareFruit).getQuantity(); 

        //ascending order
        return this.quantity - compareQuantity;

        //descending order
        //return compareQuantity - this.quantity;

    }   
}

在这里,Fruit该类实现Comparable了类型为 as 的接口,Fruit也有overriden compareTo方法。

于 2012-12-18T10:32:21.727 回答