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
答案 0 :(得分:4)
您已指定compareTo
方法,但未声明Dog
类来实施Comparable<Dog>
。此外,一旦您这样做,您需要将s
的{{1}}参数声明为compareTo
。
答案 1 :(得分:2)
如果Arrays.sort(obj)
不知道如何比较两个Dog
以查看哪一个会先出现,那么您期望Dog
如何工作? Comparable<Dog>
应该实施{{1}}。
答案 2 :(得分:1)
您的Dog类必须实现到接口Comparable
答案 3 :(得分: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){
...
(注意这里的狗类型参数!)
答案 4 :(得分:1)
您忘记在Dog类中实现Comparable接口。你的狗课应该如下。
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;
}
}