使用丢失信息转换为父类 - 存储对象的部分

时间:2015-04-02 15:48:57

标签: java inheritance serialization

我有一个包含大量信息的类Bucket,其中我只想将两个字段存储(可序列化)到一个文件中。因此,我使Bucket扩展ChatData只保留了这两个字段,因为我认为在向上转换时,我可能会丢失无用的信息并将bucket对象存储为{{ 1}}对象然后。

但是,向上升级到超类并不会使对象丢失其子类信息。我怎样才能做到这一点?

chatdata

(未经测试的代码,仅用于可视化)

如何将public class ChatData implements Serializable { private int f1 = 1; private int f2 = 2; } public class Bucket extends ChatData implements Serializable { private int f3 = 3; private int f4 = 4; // useless data when it comes to storing private int f5 = 5; public void store(ObjectOutputStream oos) { oos.writeObject( (ChatData) this ); // does also store f3, f4, f5, // ... but I don't whant these! // also, unnecessary cast, does not do anything } public static void main(String[] args) { Bucket b = new Bucket(); b.store(new ObjectOutputStream(new FileOutputStream("C:/output.dat")); } } 对象作为Bucket对象写入硬盘?如果没有,那么仅部分存储对象的首选方法是什么?

我可以想到一个简单的解决方案,比如创建一个全新的ChatData对象,但我宁愿理解这是最好的方法。

1 个答案:

答案 0 :(得分:1)

如果您不想序列化某个成员。只需将其标记为transient即可。

在您的特定情况下,您不需要经历创建超级课程的麻烦。这样做:

public class Bucket implements Serializable {
    transient private int f3 = 3;
    transient private int f4 = 4;    // useless data when it comes to storing
    transient private int f5 = 5;
    private int f1 = 1;
    private int f2 = 2;

   //leave the remaining code in this class as it is
}