import java.io.PrintStream;
import java.io.Serializable;
import java.util.logging.Logger;
/*
Сериализация человека
*/
public class Solution {
public static class Person implements Serializable {
String firstName;
String lastName;
transient String fullName;
final transient String greeting = "Hello, ";
String country;
Sex sex;
transient PrintStream outputStream = System.out;
transient 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.country = country;
this.sex = sex;
this.logger = Logger.getLogger(String.valueOf(Person.class));
}
}
enum Sex {
MALE,
FEMALE
}
public static void main(String[] args) {
}
}Sasha
1 уровень
Зачем было помечать константу, если она и так будет сериализована априори?
Решен
Комментарии (9)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #2460969
2 августа 2021, 08:10
transient наоборот исключает из сериализации.
+1
Sasha Middle Java Developer в EPAM
2 августа 2021, 08:12
Я понимаю, но она все равно будут сериализирована, какой смысл писать?
0
hidden #2460969
2 августа 2021, 08:14
она не будет сериализована
зачем её сериализовывать если она неизменна для всех объектов?
+1
Sasha Middle Java Developer в EPAM
2 августа 2021, 08:20
Она будет просто инициализирована в конструкторе при десериализации?
0
hidden #2460969
2 августа 2021, 08:21
да, при создании объекта.
+1
Sasha Middle Java Developer в EPAM
2 августа 2021, 08:22
то есть можно было тут не ставить transient?
0
hidden #2460969
2 августа 2021, 08:24решение
ну почему. нужно было. зачем её сериализовать, если она константа
+2
Sasha Middle Java Developer в EPAM
2 августа 2021, 08:29
спасибо)
0
BogarD
15 октября 2021, 12:55
Конструктор не открывается при десериализации, создаётся пустой обьект, полю присваиваются значения по умолчанию, а потом переприсваиваются восстановленные значения. Но так как полю присвоено модификатор final, он не сможет переприсвоиться, поэтому помечается transient.
+2