本帖最后由 唐王潮 于 2014-10-2 23:33 编辑
这段代码编译通过,运行时报错
- import genericTest.people;
- import genericTest.student;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.Iterator;
- import java.util.TreeSet;
- public class GenericDemo5 {
- public static void main(String[] args) {
- /**
- * 演示泛型限定在api中的体现。
- * TreeSet的构造函数
- * TreeSet(Collection<? extends E> coll);
- * 什么时候用到集合上限呢?
- * 一般往集合存储元素时,如果集合定义了E类型,通常情况下应该存储E类型的对象。
- * 对E的子类型的对象E类型也可以接受。所以这时可以将泛型从E改为 ? extends E。
- */
- Collection<student> coll = new ArrayList<student>();
- coll.add(new student("asd1",23));
- coll.add(new student("as2d2",24));
- coll.add(new student("assd3",22));
- coll.add(new student("azsd4",21));
- TreeSet<people> ts = new TreeSet<people>(coll);
- ts.add(new people("asd5",34));
-
- for (Iterator<people> it = ts.iterator(); it.hasNext();) {
- people pe = it.next();
- System.out.println(pe.getName());
- }
-
- }
- }
复制代码
报错原因:
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)
没看出来哪里类型转换异常啊?
|