据我所知" 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)...,序列化如何记录私有字段 - 它是不是假设被隐瞒了?换句话说,某些字段是否存在私有数据丢失的风险,或者是现在只是将所有内容都交给序列化过程的类?
答案 0 :(得分:-1)
Serializable只是一个标记接口,告诉编译器您希望对象能够被序列化。由于数组是Serializable,因此它们的内容将被序列化。