黑马程序员技术交流社区

标题: 大家帮我看下这段代码哪里出错了,谢谢! [打印本页]

作者: 唐王潮    时间: 2014-10-2 23:32
标题: 大家帮我看下这段代码哪里出错了,谢谢!
本帖最后由 唐王潮 于 2014-10-2 23:33 编辑

这段代码编译通过,运行时报错
  1. import genericTest.people;
  2. import genericTest.student;

  3. import java.util.ArrayList;
  4. import java.util.Collection;
  5. import java.util.Iterator;
  6. import java.util.TreeSet;


  7. public class GenericDemo5 {

  8.         public static void main(String[] args) {
  9.                 /**
  10.                  * 演示泛型限定在api中的体现。
  11.                  * TreeSet的构造函数
  12.                  * TreeSet(Collection<? extends E> coll);
  13.                  * 什么时候用到集合上限呢?
  14.                  * 一般往集合存储元素时,如果集合定义了E类型,通常情况下应该存储E类型的对象。
  15.                  * 对E的子类型的对象E类型也可以接受。所以这时可以将泛型从E改为 ? extends E。
  16.                  */
  17.                 Collection<student> coll = new ArrayList<student>();
  18.                 coll.add(new student("asd1",23));
  19.                 coll.add(new student("as2d2",24));
  20.                 coll.add(new student("assd3",22));
  21.                 coll.add(new student("azsd4",21));
  22.                 TreeSet<people> ts = new TreeSet<people>(coll);
  23.                 ts.add(new people("asd5",34));
  24.                
  25.                 for (Iterator<people> it = ts.iterator(); it.hasNext();) {
  26.                         people pe = it.next();
  27.                         System.out.println(pe.getName());
  28.                 }
  29.                
  30.         }

  31. }
复制代码


报错原因:
Exception in thread "main" java.lang.ClassCastException: genericTest.student cannot be cast to java.lang.Comparable
        at java.util.TreeMap.compare(TreeMap.java:1290)
        at java.util.TreeMap.put(TreeMap.java:538)
        at java.util.TreeSet.add(TreeSet.java:255)
        at java.util.AbstractCollection.addAll(AbstractCollection.java:344)
        at java.util.TreeSet.addAll(TreeSet.java:312)
        at java.util.TreeSet.<init>(TreeSet.java:160)
        at GenericDemo5.main(GenericDemo5.java:26)

没看出来哪里类型转换异常啊?

作者: zz_job    时间: 2014-10-2 23:39
你的Student类没有继承Comparable接口  而TreeSet要求必须实现这个接口或者提供比较器的   问题出在这  建议你好好看看TreeSet的相关知识   这个问题不难   毕老师的视频里有讲
作者: zz_job    时间: 2014-10-2 23:41
呃..是实现Comparable接口..口误了...
作者: zz_job    时间: 2014-10-2 23:44
记住这个异常  ClassCastException   在集合这里很容易出现   对了   一般情况下   不会使用你用的这种TreeSet的构造方法   一般来说是用多态定义一个TreeSet集合...你这种定义方式会浪费内存而且也比较麻烦...
作者: 唐王潮    时间: 2014-10-3 09:58
zz_job 发表于 2014-10-2 23:44
记住这个异常  ClassCastException   在集合这里很容易出现   对了   一般情况下   不会使用你用的这种Tree ...

感谢,我student继承了父类people,所以实现people,其他子类就都能用了




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