2014-11-09 3 views
1

Насколько мне известно, «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) ..., как сериализовать запись частных полей - разве это не должно быть удержано? Другими словами, существует ли риск потери данных из некоторых полей, являющихся частными, или же класс просто передает все в процесс сериализации?

ответ

-1

Serializable - это только интерфейс маркера, чтобы сообщить компилятору, что вы хотите, чтобы ваш объект мог быть сериализован. Поскольку массивы Serializable, их содержимое будет сериализовано.

Смежные вопросы