Java 父类子类转换的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 父类子类转换的问题相关的知识,希望对你有一定的参考价值。
遇到的问题是这样的。
Base为父类,childA,childB,childC分别继承Base。
在客户端方面将childA,childB,childC之中的一个对象先序列化传到服务器端。
问题是在服务器端怎么写一个统一的函数得到原来的对象。
我理解好像还是一个父类转子类的问题。。。
Base类应该设计有一个抽象方法用来区分子类,比如commandId()
然后服务端就可以通过CommandID来设计每个CommandID一个服务处理类的子类,
再服务处理父类通过泛型设计,抽象出一个转换为泛型类的动作,就可以实现子类的动态识别转换了
只能说个大概思路,具体实现要对泛型比较了解和较好的抽象能力
//转换处理参考:服务处理父类(抽象类)
public String execute(Object object) throws Exception
H handler = (H)object;
//子类实现缓存处理
public void setApplicationContext(ApplicationContext ac) throws BeansException
for (Base bean : ac.getBeansOfType(Base.class).values())
this.put(bean.getCommandId(), bean);
参考技术A Object o = new ChildA();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(o);
oos.flush();
byte[] bytes = baos.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
Object deserialized = ois.readObject();
// 反序列化后通过instanceof判断是哪个类
if (deserialized instanceof ChildA)
System.out.println(ChildA.class.getName());
else if (deserialized instanceof ChildB)
System.out.println(ChildB.class.getName());
else if (deserialized instanceof ChildC)
System.out.println(ChildC.class.getName());
else
throw new Exception("未知的类:" + o.getClass().getName());本回答被提问者采纳 参考技术B class Person
class Student extends Person
class Postgraduate extends Student
class Animal
public class InstanceofTester
public static void main(String[] args)
instanceofTest(new Student());
public static void instanceofTest(Person p)
// 判断p的真正类型
if (p instanceof Postgraduate)
System.out.println("p是类Postgraduate的实例");
else if(p instanceof Student)
System.out.println("p是类Student的实例");
else if(p instanceof Person)
System.out.println("p是类Person的实例");
else if(p instanceof Object)
System.out.println("p是类Object的实例");
/*if(p instanceof Animal)//此错编译错误,所以做注释
System.out.println("p是类Animal的实例");
*/
追问
是这样的。。。
服务器端得到的只是字节流byte[]
需要先反序列化这串字节流,这时就需要讨论是属于哪一个类
Sorry没有仔细看题哈..
额.这个反序列化倒是没怎么实践过,那我就给点建议吧
要不你就正常反序列化,能用Object类型接收了再做判断么?
............
Base abc = getChild();
if( abc instanceof ChildA)
........
else if( abc instanceof ChildB)
........
else if( abc instanceof ChildC)
.........
参考技术D 搞一个接口,之后不用管这是个啥,调用方法就可以了
java中怎样做可以把父类强制转换成子类
JAVA是强类型的语言。当引用对象的时候,如果是上溯的话,需要强制转换。如你上面写的,PiePlot p = (PiePlot)Plot,这就是上溯,生成实例时引用的是父类,需要强制转换,所以就需要加个(PiePlot)来声明Plot(Plot是父类)。 参考技术A 或许你的意思是父类对象指向子类对象的引用。
比如:父类A,子类B可以写成:A a=new B();
要不你就去研究一下里氏替换原则
以上是关于Java 父类子类转换的问题的主要内容,如果未能解决你的问题,请参考以下文章