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 オブジェクトをショートさせようとしていました。スーパーモストクラスのオブジェクト x を Dog クラスにダウンキャストしましたが、実行時に Java が try および catch ブロックを実行して、Dog を java.lang.Comparable にキャストできないと言っている理由がわかりません

4

5 に答える 5

4

メソッドを指定しましたが、実装するクラスをcompareTo宣言していません。また、一度実行したら、 のパラメータを であると宣言する必要があります。DogComparable<Dog>scompareToDog

于 2013-08-28T17:19:48.947 に答える
2

2 つの s を Arrays.sort(obj)比較してどちらが先かを確認する方法がわからない場合、どのように動作すると予想されますか? 実装する必要があります。DogDogComparable<Dog>

于 2013-08-28T17:19:31.140 に答える
1

You have to use the implements keyword, along with the name of the implemented interface (Comparable in this case), also, you can grab the opportunity to infer generic argument <Dog>:

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

Using generics your code has to be changed a bit: instead of Object, you need Dog as the argument type of compareTo().

Also, you might consider using the @Override annotation on compareTo() to make things nicer:

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

(Notice the Dog type argument here!)

于 2013-08-28T17:22:52.840 に答える
1

Dog クラスはインターフェイスに実装する必要がありますComparable

于 2013-08-28T17:20:35.083 に答える