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 对象。我将 supermostclass 的对象 x 向下转换为 Dog 类,但不知道为什么在运行时 java 正在执行 try 和 catch 块,说 Dog 不能转换为 java.lang.Comparable

4

5 回答 5

4

您已经指定了compareTo方法,但没有声明Dog要实现的类Comparable<Dog>。此外,一旦这样做,您需要将s参数声明compareToDog.

于 2013-08-28T17:19:48.947 回答
2

Arrays.sort(obj)如果它不知道如何比较两个Dogs 以查看哪个先出现, 您将如何工作?Dog应该实施Comparable<Dog>

于 2013-08-28T17:19:31.140 回答
1

你的 Dog 类必须实现接口Comparable

于 2013-08-28T17:20:35.083 回答
1

您必须使用implements关键字以及实现的接口的名称(Comparable在这种情况下),您还可以抓住机会推断通用参数<Dog>

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

使用泛型您的代码必须稍作更改:Object您需要Dog作为参数类型而不是compareTo().

此外,您可能会考虑使用@Override注释compareTo()来使事情变得更好:

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

(请注意此处的 Dog 类型参数!)

于 2013-08-28T17:22:52.840 回答
1

您忘记在 Dog 类中实现 Comparable 接口。你的 Dog 类应该如下所示。

  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;
  }
}
于 2013-08-28T17:37:47.583 回答