2013-08-28 42 views
0
public class Dog { 
int size; 
String name; 

//Deploying a constructor 
Dog(String name, int size){ 
    this.name=name; 
    this.size=size; 
} 

//Deploying toString() for printing 
public String toString(){ 
return name+"/"+size; 
} 

//Deploying compareTo() method and overriding it for int value 
public int compareTo(Object s){ 
return (this.size-((Dog)s).size); 
} 
} 
import java.util.Arrays; 
public class CompareTo { 
public static void main(String[] args){ 
    Dog[] obj=new Dog[5]; 
obj[0]=new Dog("Alpha",332); 
obj[1]=new Dog("Romeo",32); 
obj[2]=new Dog("Charlie",332); 
obj[3]=new Dog("Tyson",632); 
obj[4]=new Dog("Roger",532); 
//Without Sorting taking the output 
for(Object x:obj){ 
    System.out.println(x); 
} 
//With Sorting taking the output 
    try{Arrays.sort(obj); 
    for(Object x: obj){ 
     System.out.println(x); 
    } 
    }catch(Exception e){ 
    System.out.println("Something is wrong in this line"+e); 
    } 
    } 
    } 

Output-Alpha/332 
Romeo/32 
Charlie/332 
Osama/632 
Laden/532 
Something is wrong in this linejava.lang.ClassCastException: Dog cannot be cast to java.lang.Comparable                             

嗨, 我試圖根據狗的大小來縮短Dog對象。我downcast最superclass類的對象x到Dog類,但不知道爲什麼在運行時java正在執行try和catch塊,說Dog不能轉換爲java.lang.Comparable嘗試使用compareTo()排序數組,但得到錯誤

回答

4

您已指定compareTo方法,但未聲明Dog類實現Comparable<Dog>。另外,一旦你這樣做了,你需要聲明s參數compareToDog

2

您會如何期望Arrays.sort(obj)工作如果它不知道如何比較兩個Dog以查看哪一個會先來? Dog應執行Comparable<Dog>

1

你的狗類必須實現的接口Comparable

1

您必須使用implements關鍵字,利用所實現的接口(Comparable在這種情況下)的名字一起,另外,你可以抓住的機會來推斷通用參數<Dog>

public class Dog implements Comparable<Dog>{ 
    int size; 
    String name; 
... 

使用泛型代碼已經改變了一下:不是Object,你需要Dog作爲參數類型的compareTo()

此外,你可能會考慮使用compareTo()@Override註解讓事情更好:

1

你忘了實現Dog類Comparable接口

@Override 
public int compareTo(Dog s){ 
... 

(請注意這裏的狗類參數!) 。你的狗課堂應該在下面。

class Dog implements Comparable<Dog> { 

    int size; 
    String name; 

    // Deploying a constructor 
    Dog(String name, int size) { 
     this.name = name; 
     this.size = size; 
    } 

    // Deploying toString() for printing 
    public String toString() { 
     return name + "/" + size; 
    } 

    // Deploying compareTo() method and overriding it for int value 
    public int compareTo(Dog s) { 
    return this.size - s.size; 
    } 
} 
相關問題