A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 唐王潮 于 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)

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

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1

查看全部评分

4 个回复

倒序浏览
你的Student类没有继承Comparable接口  而TreeSet要求必须实现这个接口或者提供比较器的   问题出在这  建议你好好看看TreeSet的相关知识   这个问题不难   毕老师的视频里有讲
回复 使用道具 举报
呃..是实现Comparable接口..口误了...
回复 使用道具 举报
记住这个异常  ClassCastException   在集合这里很容易出现   对了   一般情况下   不会使用你用的这种TreeSet的构造方法   一般来说是用多态定义一个TreeSet集合...你这种定义方式会浪费内存而且也比较麻烦...

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1 赞一个!

查看全部评分

回复 使用道具 举报
zz_job 发表于 2014-10-2 23:44
记住这个异常  ClassCastException   在集合这里很容易出现   对了   一般情况下   不会使用你用的这种Tree ...

感谢,我student继承了父类people,所以实现people,其他子类就都能用了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马