黑马程序员技术交流社区

标题: 求大神解答,小弟新手 [打印本页]

作者: 李俊豪    时间: 2012-10-28 22:42
标题: 求大神解答,小弟新手
本帖最后由 古银平 于 2012-10-29 22:38 编辑

求大神,小弟新手TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常!
作者: 马磊    时间: 2012-10-29 17:41
原理上来讲是父类使用父类的compareTo方法,子类使用子类的compareTo方法。

但是在正常的使用中却会出问题,因为在比较这两个对象的时候,compareTo(T o),方法里的对象参数,我们会写成Object obj,等对象传入之后再判断,然后向下转型成为要比较的对象。如果是父类和子类同时在TreeSet里面,父类不能向下转为子类类型,此时会有 ClassCastException抛出。但如果先添加子类,最后再添加父类,这个时候就没有了这个问题了。因为子类可以向上转型为父类类型。


所以,一般来说如果子类父类各有自己的compareTo方法的时候,严谨的代码这时候肯定是会抛异常的。但如果子类不写compareTo方法的话,父类子类会共用一个compareTo方法,这时就没问题了 。

作者: 刘丽娜    时间: 2012-10-29 20:10
学习了      
作者: 李俊豪    时间: 2012-10-29 22:37
问题已经解决
作者: 会飞的鱼    时间: 2012-10-29 22:45
李俊豪 发表于 2012-10-29 22:37
问题已经解决

我叫了好几遍了,没有解决这个选项。。。有个管理员冯哥哥知道这个情况。。。
{:soso_e119:}{:soso_e119:}
{:soso_e119:}{:soso_e119:}
{:soso_e119:}{:soso_e119:}
{:soso_e119:}{:soso_e119:}

QQ截图20121029224155.png (6.01 KB, 下载次数: 60)

QQ截图20121029224155.png

作者: 李俊豪    时间: 2012-10-29 22:57
845616011 发表于 2012-10-29 22:45
我叫了好几遍了,没有解决这个选项。。。有个管理员冯哥哥知道这个情况。。。
{:soso_e119: ...

file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/602276800/QQ/WinTemp/RichOle/6BMSV8IY)O2BY8G%60TR7%7D%7B10.jpg
去这公共里看清楚,把思路理清了在说吧

未命名.jpg (7.05 KB, 下载次数: 67)

未命名.jpg

作者: 打工人    时间: 2012-10-29 23:07
845616011 发表于 2012-10-29 22:45
我叫了好几遍了,没有解决这个选项。。。有个管理员冯哥哥知道这个情况。。。
{:soso_e119: ...

是冯姐姐!!!你的论坛怎么回事捏。。。你再发什么帖子我给你改
作者: 会飞的鱼    时间: 2012-10-29 23:34
冯海霞 发表于 2012-10-29 23:07
是冯姐姐!!!你的论坛怎么回事捏。。。你再发什么帖子我给你改

:loveliness:  这么好,我早发了改名贴了,一直没帮我改耶!!还有小眼镜斯文。。。




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