public class Solution {
public static class Person {
String firstName;
String lastName;
//По условию задачи это поле должно быть transient. Но почему? Поле инициализируется в конструкторе, но при дессериализации он не вызывается //(вызывается только пустой конструктор базового класса).
String fullName;
final String greetingString;
String country;
Sex sex;
PrintStream outputStream;
Logger logger;
Person(String firstName, String lastName, String country, Sex sex) {
this.firstName = firstName;
this.lastName = lastName;
this.fullName = String.format("%s, %s", lastName, firstName);
this.greetingString = "Hello, ";
this.country = country;
this.sex = sex;
this.outputStream = System.out;
this.logger = Logger.getLogger(String.valueOf(Person.class));
}
}
enum Sex {
MALE,
FEMALE
}
public static void main(String[] args) {
}
}
Username
29 уровень
Почему поле fullName должно быть transient?
Решен
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Сергеев ВикторMaster
19 июня 2018, 21:20
потому что оно и так есть, посмотрите из чего оно состоит
0
Username
19 июня 2018, 21:38
Давайте по порядку. Создали объект и все поля были инициализированы в конструкторе. Далее произвели сериализацию, исключив поля, упомянутые в задании. После этого выполнили дессериализацию. Смотрим внимательно на этот процесс. Вызывается конструктор суперкласса с пустыми параметрами. В данном случае - это конструктор класса Object. Выделяется память для всех полей, поля получают нулевые значения. Далее поля, которые не были ранее помечены transient, получают дессериализованные значения. Каким образом в этом сценарии будет восстановлено исходное значение поля fullName? Конструктор-то класса Person не вызывается!
+2
Сергеев ВикторMaster
19 июня 2018, 22:43решение
вешаете на геттер fullName сложение имени и фамилии и все будет нормально
+2
Username
20 июня 2018, 00:21решение
А если объект должен быть помещён в список какой-нибудь? Тогда после десериализации объект не будет иметь ожидаемого состояния. Нужно предусматривать механизм контроля состояния объекта видимо? Впрочем, ход вашей мысли понятен. Возможно, вы правы.
+1