一系列不可序列化的对象是可以串联的吗?

时间:2014-11-09 11:52:53

标签: java android serialization

据我所知" com.google.api.services.drive.model.File"是不可服用的。当我查找here时,它没有实现可服用的,当我尝试将其作为可服用的意图(如下所示)时,我遇到编译错误阻止了我。

然而,如果我将这些不可服务化的文件包装到一个数组中,那么当我将它作为可服用的函数写入一个intent时,我就不会收到编译器警告。我认为它肯定会导致运行时错误 - 也许编译器只是看不到我在数组中持有不可服务化的对象。

好奇心让我变得更好,我参加了测试,令我惊讶的是它有效。我成功地将我的文件数组广播到组件部分,并从中检索数据。

所以有人可以向我解释为什么这样可以正常工作?

    Intent intent = new Intent();
    String key = "key";

    //com.google.api.services.drive.model.File is not serializable (I think)
    com.google.api.services.drive.model.File file = new File();
    com.google.api.services.drive.model.File[] files = new File[]{};

    intent.putExtra(key, files);  // yet serializing array of files, no compiler error
    intent.putExtra(key, file);   // putting just one file, compiler error.

编辑:我知道包装未序列化文件会让java将其视为可序列化文件,但如果该类具有私有字段会发生什么?实际上File确实有私有字段(尽管有很多公共get / sets)...,序列化如何记录私有字段 - 它是不是假设被隐瞒了?换句话说,某些字段是否存在私有数据丢失的风险,或者是现在只是将所有内容都交给序列化过程的类?

1 个答案:

答案 0 :(得分:-1)

Serializable只是一个标记接口,告诉编译器您希望对象能够被序列化。由于数组是Serializable,因此它们的内容将被序列化。