2012-12-18 112 views
-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) 
+8

你需要有SpaceObjectImpl实现媲美。 – assylias

+0

啊多数民众赞成它,谢谢.. :) –

回答

-1

SpaceObjectImpl必须实现Comparable接口。

以下是an example by 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接口类型为Fruit,并具有也overridencompareTo方法。

+0

啊是的,这实现失踪,谢谢:) –

+6

-1你留着复制的东西,而适当的归属。 http://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/ – assylias

+0

只需在最后添加一个链接是不是在这种情况下,归属不够好。我编辑了你的答案,使其更清楚地说明代码示例的来源。 –

0

compareTo方法是媲美,因而自定义类应该重写使用它TreeMap.Please实现自定义类

0

您已写入了自己compareTo()方法可比的接口定义。你需要编写自己的compareTo()但是,需要将超过缠身,即你的类应该实现Comparable

Lists (and arrays) of objects that implement this interface can be sorted automatically by Collections.sort (and Arrays.sort).

1

SpaceObjectImpl必须实现Comparable<SpaceObjectImpl>