假设我有一个ArrayList<B> array来自某个类的对象B,它扩展了A。B有一个实例字段bb和A一个字段aa。我知道使用保存array到 .dat 文件ObjectOutputStream需要B(不仅仅是ArrayList!)实现Serializable。但是,我发现从文件中加载对象时(使用ObjectInputStream):
arrayLoaded = (ArrayList<B>)myObjIn.readObject();
加载的数组与原始数组不同:在特定情况下,arrayLoaded.get(0).bb具有与 in 相同的值array,但arrayLoaded.get(0).aa被“归零”。它有一个默认的初始化值,不管它在array保存到文件时的值。但是,这个问题可以通过让也A实现来解决Serializable。
困扰我的是这个错误是如此微妙:没有例外,没有警告(在 Eclipse 中),什么都没有。这是有原因的还是仅仅是Java开发人员的疏忽?Serializable每次我想使用对象 IO 流时,我是否只需要接受它并认真考虑层次结构中的哪些类实现?