黑马程序员技术交流社区

标题: 已经实现了Compareable怎么还会包类型转换异常啊?????... [打印本页]

作者: 乔九    时间: 2013-2-23 09:06
标题: 已经实现了Compareable怎么还会包类型转换异常啊?????...
package com.itheima;
import java.util.*;
class Student1 implements Comparable
{
        private int age;
        private String name;
        public int compareTo(Object obj)
        {
                if(!(obj instanceof Student1))
                        throw new RuntimeException("不是学生类");
                Student1 stu=(Student1)obj;
                if(this.age>stu.age)
                        return 1;
                else if(this.age==stu.age)
                        return 0;
                else
                        return -1;
        }
        Student1(String name,int age)
        {
                this.name=name;
                this.age=age;
        }
        public String getName()
        {
                return name;
        }
        public int getAge()
        {
                return age;
        }
       
       
}
public class TreesetTest1 {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                TreeSet ts=new TreeSet();
                ts.add(new Student("01",22));
                ts.add(new Student("02",23));
                ts.add(new Student("03",24));
                ts.add(new Student("jhg",24));
                Iterator it=ts.iterator();
                while(it.hasNext())
                {
                        Student1 stu=(Student1)it.next();
                        System.out.println(stu.getName()+"........"+stu.getAge());
                }

        }

}Exception in thread "main" java.lang.ClassCastException: com.itheima.Student cannot be cast to com.itheima.Student1  错误提示

作者: 吴硕    时间: 2013-2-23 09:29
本帖最后由 吴硕 于 2013-2-23 09:31 编辑

Exception in thread "main" java.lang.ClassCastException: com.itheima.Student cannot be cast to com.itheima.Student1
  1.                 ts.add(new Student("01",22));

  2.                 ts.add(new Student("02",23));

  3.                 ts.add(new Student("03",24));

  4.                 ts.add(new Student("jhg",24));
复制代码
不存在Student类

作者: 逍林游    时间: 2013-2-23 09:32
你的学生类是:class Student1 ···············
而在main函数中 new Student("01",22)················
你仔细瞧瞧
作者: 罗海云    时间: 2013-2-23 10:57
public static void main(String[] args) {
                // TODO Auto-generated method stub
                TreeSet ts=new TreeSet();
                ts.add(new Student("01",22));
                ts.add(new Student("02",23));
                ts.add(new Student("03",24));
                ts.add(new Student("jhg",24));
                Iterator it=ts.iterator();
                while(it.hasNext())
                {
                        Student1 stu=(Student1)it.next();//这样不行吧.你上面是一个匿名内部类.这个it.next()里面只是包含的元素,并不是对象
                        System.out.println(stu.getName()+"........"+stu.getAge());
                }

作者: 谢洋    时间: 2013-2-23 15:13
/**********************问题在这**********************/

              TreeSet ts=new TreeSet();
                ts.add(new Student("01",22));  //入去的是Student
                ts.add(new Student("02",23));
                ts.add(new Student("03",24));
                ts.add(new Student("jhg",24));
                Iterator it=ts.iterator();
                while(it.hasNext())
                {
                        Student1 stu=(Student1)it.next();//
                        System.out.println(stu.getName()+"........"+stu.getAge());
                }
/***********************************************************/
部问题是存进去的是Student类型,但取出来时把它强转为Student1类型
1、it.next()取出来的已经向上转型为Object类型,因为存进去的是Student类,所以可以把它强转回原形(Student)
2、如果Student继承Student1,可以转为Student1类型(向上转,不安全),在这,Student并有没继承Student1
作者: 朱玉玺    时间: 2013-2-23 15:47
哥们,你存的是Student,而你定义的是Student1,你是Student类肯定没实现comparable接口
作者: 杨杨    时间: 2013-2-23 16:00
student不存在




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