首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 关于java 动态强制转换的问题 [已结帖,结帖人:lichongkk]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lichongkk
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-11-18 17:59:14 楼主
    简单的用类来表示:

    数据:

    父类 Father
    子类 Son1 ,  son2 ,  son3,.....sonN.


    数据载体:
    Bean 类用来成装数据
    方法 public Father getdata();
    变量 String  class_name="包名.子类名"

    数据结构:
    beanList <Bean>

    需求:
    当我调用Bean 的getData方法时 我想通过判断 class_name的值来 强制转换成相应的子类


    类似于  Son1 son1=(参数--子类名) bean.getData();
    也就时说 我想 动态的进行强制转换 请大侠们出手相助.


    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • laorer
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 18:05:101楼 得分:20
    如果可以用 多态,建议还是用多态,
    本来觉得可以用 反射解决的,不过对反射又不熟
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • laorer
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 18:08:262楼 得分:0


    if("Son1".equals(参数--子类名)){
      Son1 son1=(Son1) bean.getData();
    }else if (){

    ...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • link_1029
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 18:15:203楼 得分:5
    引用 2 楼 laorer 的回复:


    if("Son1".equals(参数--子类名)){
      Son1 son1=(Son1) bean.getData();
    }else if (){

    ...

    就这样吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • link_1029
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 18:18:204楼 得分:20
    反射出来的对象所申明的类型也是Object类的,所以我觉得反射也不能解决动态强制转换的问题
    只能自己申明对象的类型了,所以能用多态尽量还是不要强制转换了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • showde123
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 20:17:355楼 得分:5
    关注 帮顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • PorterChou
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 20:28:486楼 得分:20
    反射是根据名字动态加载类,得到实例。这个情况是,已经有实例了,但要动态向下转型,只能考虑if-else或者工厂.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lichongkk
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 09:04:227楼 得分:0
    回4楼和2楼  我也考虑过用多态来做 (就是用if语句的 )
    问题的关键是我的子类太多了. 这样做的话,一是效率肯定会有问题 .二是代码两太庞大了 .
    所以才考虑这样做的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lichongkk
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 09:06:278楼 得分:0
    引用 6 楼 PorterChou 的回复:
    反射是根据名字动态加载类,得到实例。这个情况是,已经有实例了,但要动态向下转型,只能考虑if-else或者工厂.


    难道没有办法这样吗 ?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • rosewj
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 09:08:489楼 得分:5
    帮顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ZhlIsJacky
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 10:10:5610楼 得分:5
    不会,只能帮忙顶起来
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • StarNCraft
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 12:31:3411楼 得分:1
    建议用工厂或if-else吧!
    反射不推荐使用!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hdhai9451
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 12:55:1712楼 得分:1
    学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jianglihua1986
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 12:57:1813楼 得分:1
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • piaoye83
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 13:25:0514楼 得分:1
    与个工厂类就是了
    何必这么麻烦
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lichongkk
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 13:33:2115楼 得分:0
    引用 7 楼 lichongkk 的回复:
    回4楼和2楼  我也考虑过用多态来做 (就是用if语句的 )
    问题的关键是我的子类太多了. 这样做的话,一是效率肯定会有问题 .二是代码两太庞大了 .
    所以才考虑这样做的

    说过了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • laorer
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 15:46:2816楼 得分:0
    能不能把你的想法说出来 ,或者说为什么要子类化?看看你的设计可不可以改一下思路,
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • maciie
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 19:58:4117楼 得分:5
    Java code
    if(obj instanceof Son ){ return (Son)obj; }

    楼主是否想这样?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Longinc
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 22:20:4318楼 得分:5
    帮顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lichongkk
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-20 10:30:4519楼 得分:0
    我的设计思路
    项目里要实现一个树由树来触发右边的显示床体
    现在的问题是树上的节点种类N多如果都要用if语句来判断的话代码量太庞大了
    所以想做一个动态加载的机制

    大体想法是
    在bean里加入两个变量
    一个是      子类数据的类名(String)
    另一个是    显示该子类的窗体的类名(String)


    这样当我点击树节点触发事件时
    先根据"显示该子类的窗体的类名(String)" 来生成窗体对象
    然后将数据转成相应子类插入到窗体中
    在将窗体set到右边的显示窗体中.

    over


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lichongkk
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-20 10:36:4620楼 得分:0
    其实这个没必要,非的用强转来做.想了一下用泛形也可以实现.

    只是想知道这样做是否可行
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • berlou
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-20 11:13:5221楼 得分:6
    看不出这么设计的好处。
    多态不代表if else
    你既然抽象到父类的层次, 为什么还要向下转型回来?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lichongkk
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-20 12:45:5522楼 得分:0
    引用 20 楼 lichongkk 的回复:
    其实这个没必要,非的用强转来做.想了一下用泛形也可以实现.

    只是想知道这样做是否可行



    我要用到子类的变量

    当我调用Bean 的getData方法时 我想通过判断 class_name的值来 强制转换成相应的子类
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved