03 мар. 2011 г., 06:29 от zengr

 не отключает сериализацию вообще, но только для поля, с которым она связана. Таким образом, сериализация Foo не будет передавать значение для поля v3. На принимающей стороне при повторной инициализации экземпляра Foo механизм сериализации не будет пытаться прочитать это поле из потока и оставит его пустым.

public class Foo implements java.io.Serializable {
   private int v1;
   private static double v2;
   private Loan v3 = new Loan();
}

етры:
О. Экземпляр Foo может быть сериализован, потому что Foo реализует Serializable.
B. Экземпляр Foo нельзя сериализовать, поскольку Foo содержит несериализуемую переменную экземпляра v3.
C. Если вы пометите v3 как временный, экземпляр Foo будет сериализуемым.
Д. б и в

Ответ: D

Объяснение: Объект не может быть сериализован, даже если его класс реализуетjava.io.Serializableпотому что он может содержать не сериализуемые переменные экземпляра.

Теперь мой вопрос:

Насколько я знаю, переходный процессиспользуемый отключить сериализацию. Тогда как переходный процесс в этом случае помогает нам сериализовать foo?

Ответы на вопрос (0)

03 мар. 2011 г., 05:46 от 69k

transient не отключает сериализацию вообще; это просто отмечает участников, которые не будут сериализованы. Обычно он используется для вещей, которые были бы неправильными или неактуальными, когда объект не сериализован, или вещей, которые было бы небезопасно хранить (пароли, дешифрованные данные и тому подобное), или несериализуемых вещей, которые могли бы быть легко реконструированным.

В этом случае я предполагаюLoan класс не сериализуем. (Если бы это было так, то А было бы правильно.) Маркировкаv3 Переходный процесс просто говорит Java не беспокоиться об этом поле, а продолжить и сериализовать другие. Это означает несериализованныйFoo может иметь нольv3, Если вы хотите сохранитьLoan Кроме того, вам нужно либо отслеживать достаточно информации, чтобы воссоздать ее по желанию, либо изменить классLoan так что он реализуетjava.io.Serializable также.

Кроме того, есть методы, которые вы могли бы реализовать (writeObject, readObject) если вам нужен контроль над сериализацией. Но это может быть немного хлопотно.

03 мар. 2011 г., 05:46 от Vance Maverick

вы уверены, что Loan не сериализуем? Если это так, то B не применяется.

С другой стороны, если это действительно не так, то B и C правы.transient не отключает сериализацию вообще, но только для поля, с которым она связана. Таким образом, сериализация Foo не будет передавать значение для поля v3. На принимающей стороне при повторной инициализации экземпляра Foo механизм сериализации не будет пытаться прочитать это поле из потока и оставит его пустым.

03 мар. 2011 г., 06:19 от user207421

foo?

Потому что это позволяет сериализоватьотдых Фу, другие члены, которыенаходятся сериализации.

ВАШ ОТВЕТ НА ВОПРОС