在反序列化时如何找到对象所属的正确子类?

时间:2015-11-26 09:16:59

标签: java inheritance serialization casting

这就是场景。

我有一个java代码将序列化对象写入.ser文件,另一个用于从.ser文件中读取对象。

执行序列化的代码还包含类定义,如下所示 -

abstract class Currency implements Serializable{
    protected double value;
    abstract double getValue();
    abstract void print();
}

class Rupee extends Currency{
    Rupee(double val){
        value=val;
    }
    public double getValue(){
        return value;
    }
    public void print(){
        System.out.println("INR "+value);
    }
}

class Dollar extends Currency{
    Dollar(double val){
        value=val;
    }
    public double getValue(){
        return value;
    }
    public void print(){
        System.out.println("USD "+value);
    }
}

现在,我使用一个货币参考,我可以将其转发为卢比或美元,然后我随机生成卢比和美元对象,并将它们序列化为.ser文件。

问题是,在另一个代码中对此进行反序列化时,如何区分在美元或卢比对象之间读取的对象,因为它可以(随机生成)。 readObject()方法只返回一个Object类型,需要显式转换。要进行转换,我首先需要找出它是哪个类对象。帮助我。

1 个答案:

答案 0 :(得分:1)

您可以使用运算符instanceof来检索给定对象实例的类型。

示例: if (currency instanceof Dollar) {...}