小白教程

 找回密码
 立即注册
查看: 6561|回复: 3

[已解决]关于父类和子类转换的问题

[复制链接]

1

主题

1

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2021-5-16 17:24:06 | 显示全部楼层 |阅读模式
我现在有A1,A2,A3,A4四个类继承了A,然后我接参数会接收到A1~A4中任意一个类,所以我用A类接收了(此时参数是用请求的方式接收),然后我要对数据做处理,可能需要用到A1里面的属性,如果我直接用A点,是点不出来,就只能转换类型,强转又会报类造型异常,我现在能怎么做?
最佳答案
2021-5-22 09:06:09
楼上说的instanceof是处理普通方法调用的类型识别
如果你是用请求方式接收、拿spring来说,如果你用对象接收了一个json字符串、那么spring 会使用json序列化工具将对象反转为对象A
此时这个对象就是A的实例、强转会失败、而且子类多出来的属性会丢失(这是取决于json序列化方式)
不确定类型的建议使用map接收、如果非要转换成对象、让请求端多传一个参数类型(例如1、2、3、4) ,目的是告诉你是属于哪一个子类的
然后你自己判断这个参数反转成对应子对象、不过这样子需要你手动将json字符串转换对象
只有这两个方法
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2021-5-19 08:11:40 | 显示全部楼层
强行转换前用instaneof判断一下是不是A1类型
比如
if (p instanceof A1) {//p是A类型参数
    System.out.println(((A1)p).xxx); //转换为A1访问xxx
}
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2021-5-22 09:06:09 | 显示全部楼层 &
楼上说的instanceof是处理普通方法调用的类型识别
如果你是用请求方式接收、拿spring来说,如果你用对象接收了一个json字符串、那么spring 会使用json序列化工具将对象反转为对象A
此时这个对象就是A的实例、强转会失败、而且子类多出来的属性会丢失(这是取决于json序列化方式)
不确定类型的建议使用map接收、如果非要转换成对象、让请求端多传一个参数类型(例如1、2、3、4) ,目的是告诉你是属于哪一个子类的
然后你自己判断这个参数反转成对应子对象、不过这样子需要你手动将json字符串转换对象
只有这两个方法
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2021-5-26 13:59:44 | 显示全部楼层
根据您提到的第二种方法,我必须接收一个JSON字符串作为参数,然后将其转换为类型。通过这种方式,我在超类对象中有一个属性,用于确定它是哪个子类,所以我不能使用它,我最终只能接收两个参数,一个JSON字符串。还有一个字段用于确定它是哪个子类。是这个意思吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|小白教程 ( 粤ICP备20019910号 )

GMT+8, 2024-9-20 12:32 , Processed in 0.025955 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表