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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李俊豪 中级黑马   /  2012-10-28 22:42  /  2244 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 古银平 于 2012-10-29 22:38 编辑

求大神,小弟新手TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常!

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
原理上来讲是父类使用父类的compareTo方法,子类使用子类的compareTo方法。

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


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

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1 赞一个!

查看全部评分

回复 使用道具 举报
学习了      
回复 使用道具 举报
问题已经解决

点评

那就别问题改成已解决  发表于 2012-10-29 22:38
回复 使用道具 举报
李俊豪 发表于 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, 下载次数: 62)

QQ截图20121029224155.png

点评

你先申请把名字改了  发表于 2012-10-29 22:48
回复 使用道具 举报
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, 下载次数: 69)

未命名.jpg
回复 使用道具 举报
845616011 发表于 2012-10-29 22:45
我叫了好几遍了,没有解决这个选项。。。有个管理员冯哥哥知道这个情况。。。
{:soso_e119: ...

是冯姐姐!!!你的论坛怎么回事捏。。。你再发什么帖子我给你改
回复 使用道具 举报
冯海霞 发表于 2012-10-29 23:07
是冯姐姐!!!你的论坛怎么回事捏。。。你再发什么帖子我给你改

:loveliness:  这么好,我早发了改名贴了,一直没帮我改耶!!还有小眼镜斯文。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马