关于java 动态强制转换的问题

lichongkk 2008-11-18 05:59:14
简单的用类来表示:

数据:

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


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

数据结构:
beanList<Bean>

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



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





...全文
581 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
lichongkk 2008-11-20
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 lichongkk 的回复:]
其实这个没必要,非的用强转来做.想了一下用泛形也可以实现.

只是想知道这样做是否可行
[/Quote]


我要用到子类的变量

当我调用Bean 的getData方法时 我想通过判断 class_name的值来 强制转换成相应的子类
berlou 2008-11-20
  • 打赏
  • 举报
回复
看不出这么设计的好处。
多态不代表if else
你既然抽象到父类的层次, 为什么还要向下转型回来?
lichongkk 2008-11-20
  • 打赏
  • 举报
回复
其实这个没必要,非的用强转来做.想了一下用泛形也可以实现.

只是想知道这样做是否可行
lichongkk 2008-11-20
  • 打赏
  • 举报
回复
我的设计思路
项目里要实现一个树由树来触发右边的显示床体
现在的问题是树上的节点种类N多如果都要用if语句来判断的话代码量太庞大了
所以想做一个动态加载的机制

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


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

over


jianglihua1986 2008-11-19
  • 打赏
  • 举报
回复
Andy__Huang 2008-11-19
  • 打赏
  • 举报
回复
学习
StarNCraft 2008-11-19
  • 打赏
  • 举报
回复
建议用工厂或if-else吧!
反射不推荐使用!
Longinc 2008-11-19
  • 打赏
  • 举报
回复
帮顶
ZhlIsJacky 2008-11-19
  • 打赏
  • 举报
回复
不会,只能帮忙顶起来
rosewj 2008-11-19
  • 打赏
  • 举报
回复
帮顶
lichongkk 2008-11-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 PorterChou 的回复:]
反射是根据名字动态加载类,得到实例。这个情况是,已经有实例了,但要动态向下转型,只能考虑if-else或者工厂.
[/Quote]

难道没有办法这样吗 ?
lichongkk 2008-11-19
  • 打赏
  • 举报
回复
回4楼和2楼 我也考虑过用多态来做 (就是用if语句的 )
问题的关键是我的子类太多了. 这样做的话,一是效率肯定会有问题 .二是代码两太庞大了 .
所以才考虑这样做的
maciie 2008-11-19
  • 打赏
  • 举报
回复

if(obj instanceof Son ){
return (Son)obj;
}

楼主是否想这样?
laorer 2008-11-19
  • 打赏
  • 举报
回复
能不能把你的想法说出来 ,或者说为什么要子类化?看看你的设计可不可以改一下思路,
lichongkk 2008-11-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lichongkk 的回复:]
回4楼和2楼 我也考虑过用多态来做 (就是用if语句的 )
问题的关键是我的子类太多了. 这样做的话,一是效率肯定会有问题 .二是代码两太庞大了 .
所以才考虑这样做的
[/Quote]
说过了
風男 2008-11-19
  • 打赏
  • 举报
回复
与个工厂类就是了
何必这么麻烦
若凹 2008-11-18
  • 打赏
  • 举报
回复
反射是根据名字动态加载类,得到实例。这个情况是,已经有实例了,但要动态向下转型,只能考虑if-else或者工厂.
showde123 2008-11-18
  • 打赏
  • 举报
回复
关注 帮顶
link_1029 2008-11-18
  • 打赏
  • 举报
回复
反射出来的对象所申明的类型也是Object类的,所以我觉得反射也不能解决动态强制转换的问题
只能自己申明对象的类型了,所以能用多态尽量还是不要强制转换了
link_1029 2008-11-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 laorer 的回复:]


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

...
[/Quote]
就这样吧
加载更多回复(2)

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧