我正在尝试对列表进行排序,如下所示。
List dg = new ArrayList();
dg.add(new Dog("one"));
dg.add(new Dog("two"));
dg.add(new Dog("three"));
dg.add(new Dog("four"));
dg.add(new String("Ankit"));
我试图在下面的Dog类中实现可比性(不确定它是否在这里有用)
//Dog class below//
class Dog implements Comparable<Dog>{
String name;
public Dog(String name) {
this.name = name;
}
public String getName() {
return name;
}
public int compareTo(Dog d){
return this.getName().compareTo(d.getName());
}
然而问题是我在下面给出比较器,我得到了ClassCastException。怎么解决这个问题?
class StringComparator implements Comparator {
public int compare(Object d, Object s) {
String p=((Dog)d).getName();
return (p.compareTo(s.toString()));
}
}
//usage of the above comparator
Arrays.sort(odog,sc);
答案 0 :(得分:0)
问题是:
使用dg.add(new String("Ankit"));
将列表对象与Dog对象混合在一起列表中是否真的需要字符串对象。
然后你尝试使用你的比较器对它进行排序,你的比较器盲目地将转换值输入到Dog对象。因此,当它遇到你的String对象时,它会尝试将它转换为String对象,这是不可能的(由于Dog不是String的子类),因此你得到ClassCastException。
我会从狗列表中删除String对象来解决问题。