黑马程序员技术交流社区

标题: 求解答啊 [打印本页]

作者: 田宇鹤    时间: 2012-11-24 23:03
标题: 求解答啊

public class TestSet {
        public static void main(String[] args) {
               
                TreeSet<Student> se = new  TreeSet<Student>();
               
                Student s1 = new Student("张三",90);
                Student s2 = new Student("王五",90);
                Student s3 = new Student("赵六",90);


                se.add(s1);
                se.add(s2);
                se.add(s3);


//                se.add("s");
//                se.add("a");
//                se.add("c");
                       
                Iterator<Student> it = se.iterator();
               
                while(it.hasNext()) {
                        Student s = it.next();
                        System.out.println(s.getName() + "-" + s.getAge());
                }
        }
}


TreeSet 打印 Student 类型的就会出现 类型转换异常,而String类型就没事 ,如果要想打印Student类型的应该怎么办啊?


作者: 崔政    时间: 2012-11-24 23:19
请先注意你的错误的全部信息

Exception in thread "main" java.lang.ClassCastException: test.Student cannot be cast to java.lang.Comparable
是类型转换异常不假,但是你得看清楚是从哪转换到哪。

因为你用的是Treeset,而不是一般的集合。Treeset是要对集合内的元素排序的。而你的Student类既没有既然实现Comparable接口,实现compareTo方法,
也没有搞出一个比较器。
我对你的student类稍加改造。
  1. class Student implements Comparable<Student>{//实现接口,并指定泛型
  2.         private String name;
  3.         public Student(String name, int age) {
  4.                 super();
  5.                 this.name = name;
  6.                 this.age = age;
  7.         }
  8.         private int age;
  9.         public String getName() {
  10.                 return name;
  11.         }
  12.         public void setName(String name) {
  13.                 this.name = name;
  14.         }
  15.         public int getAge() {
  16.                 return age;
  17.         }
  18.         public void setAge(int age) {
  19.                 this.age = age;
  20.         }
  21.         @Override
  22.         public int compareTo(Student stu) {
  23.                 // TODO Auto-generated method stub
  24.                
  25.                 //return Integer.valueOf(stu.getAge()).compareTo(Integer.valueOf(this.getAge()));//按年龄比较
  26.                 return stu.getName().compareTo(this.getName());//按姓名比较
  27.         }
  28. }
复制代码

作者: 田宇鹤    时间: 2012-11-24 23:29
崔政 发表于 2012-11-24 23:19
请先注意你的错误的全部信息

Exception in thread "main" java.lang.ClassCastException: test.Student ca ...

嗯  了解了  谢谢哈
作者: 潘天功    时间: 2012-11-24 23:30
关键是你自定义学生类了吗?如果只是目前的代码是不行的。
可以通过实现Comparator接口中的compare方法、对自定义学生类进行操作





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