福乐乐 发表于 2021-5-16 17:24:06

关于父类和子类转换的问题

我现在有A1,A2,A3,A4四个类继承了A,然后我接参数会接收到A1~A4中任意一个类,所以我用A类接收了(此时参数是用请求的方式接收),然后我要对数据做处理,可能需要用到A1里面的属性,如果我直接用A点,是点不出来,就只能转换类型,强转又会报类造型异常,我现在能怎么做?

塔里的兄弟 发表于 2021-5-19 08:11:40

强行转换前用instaneof判断一下是不是A1类型
比如
if (p instanceof A1) {//p是A类型参数
    System.out.println(((A1)p).xxx); //转换为A1访问xxx
}

瞧一瞧看一看 发表于 2021-5-22 09:06:09

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

超级王者 发表于 2021-5-26 13:59:44

根据您提到的第二种方法,我必须接收一个JSON字符串作为参数,然后将其转换为类型。通过这种方式,我在超类对象中有一个属性,用于确定它是哪个子类,所以我不能使用它,我最终只能接收两个参数,一个JSON字符串。还有一个字段用于确定它是哪个子类。是这个意思吗?
页: [1]
查看完整版本: 关于父类和子类转换的问题