黑马程序员技术交流社区

标题: 如何处理该ClassCastException异常 [打印本页]

作者: 吖钦    时间: 2014-12-8 13:53
标题: 如何处理该ClassCastException异常
程序如下:
import java.util.*;
public class Lianxi09
{
        public static void main(String[] args)

        {
         TreeSet<Student10> ts = new TreeSet<Student10>();
         ts.add(new Student10("abc03"));
        }
}
class Person10
{
        private String name;
        Person10(String name)
        {
                this.name= name;       
        }
        public String getName()
        {
                return name;
        }
        public String toString()
        {
                return "Person:"+name;
        }
}
class Student10  extends Person10
{
        Student10 (String name)
        {
                 super(name);
        }
}
编译时出现
Exception in thread "main" java.lang.ClassCastException: 第十五天.Student10 cannot be cast to java.lang.Comparable
        at java.util.TreeMap.compare(Unknown Source)
        at java.util.TreeMap.put(Unknown Source)
        at java.util.TreeSet.add(Unknown Source)
        at 第十五天.Lianxi09.main(Lianxi09.java:9)
提问:该如何解决?

作者: 龙骑将杨影枫    时间: 2014-12-8 14:50
请在class Person10后面加implements Comparable,TreeSet里存放的类必须继承Comparable接口。
作者: HelloWorld!    时间: 2014-12-8 15:14
TreeSet集合是强制性排序的,TreeSet集合对元素强制性排序,有排序就必须比较,比较的方式有两种:
第一种方式:元素自身具备比较性,具体做法是元素所属的类实现Comparable接口,复写接口中的comparaTo()方法,自定义比较条件。如果元素自身不具备比较性,或者排序规则不是所需,就可以采用第二种方式:自定义比较器类实现Comparator接口,复写其compare()方法,自定义比较条件,将自定义比较器对象作为TreeSet集合构造函数的实际参数传递,让TreeSet集合自身具备比较性,可以对元素按比较器定义的规则进行排序。优先考虑第二种方式。
作者: lwh316658735    时间: 2014-12-8 15:17
按理说,添加1个元素是不会有错的。但是最好给存入的对象覆盖其自然排序的方法,不然会报你这样的异常的
作者: 有陷阱快跑丶    时间: 2014-12-8 19:18
TreeSet中需要 实现能自然排序 或者用比较器排序  可以将要存的类实现Runnable 接口 实现compareTo方法
作者: 有陷阱快跑丶    时间: 2014-12-8 19:38
有陷阱快跑丶 发表于 2014-12-8 19:18
TreeSet中需要 实现能自然排序 或者用比较器排序  可以将要存的类实现Runnable 接口 实现compareTo方法  ...

打错 不好意思 是Comparable:P




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2