Насколько мне известно, «com.google.api.services.drive.model.File» не является сериализуемым. Когда я смотрю на него here, он не реализует сериализуемый, и когда я пытаюсь представить его в качестве serializable (как показано ниже), я получаю ошибку компилятора, которая мешает мне.Массив несериализуемых объектов можно серилизовать?
Тем не менее, если я обертываю эти несертифицируемые файлы в массив, я не получаю предупреждение о компиляторе, когда я пишу его в намерение как сериализуемое. Я думал, что это наверняка приведет к ошибке во время выполнения, хотя, возможно, компилятор просто не видит, что я держу в массиве несертифицируемые объекты.
Любопытство стало лучше меня, и я провел тест, и, к моему удивлению, это сработало. Я успешно передал с намерением мой массив файлов в составные части и извлекал данные из них.
Так может кто-нибудь объяснить мне, почему это работает так, как есть?
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.
Edit: Я понимаю, что обертывание не-сериализованный файл делает Java проверить его как сериализации, но то, что происходит, если класс имеет частные поле? Фактически у файла есть частные поля (хотя и с множеством публичных get/sets) ..., как сериализовать запись частных полей - разве это не должно быть удержано? Другими словами, существует ли риск потери данных из некоторых полей, являющихся частными, или же класс просто передает все в процесс сериализации?