Уважаемые знатоки, вопрос к вам, как работает десериализация под капотом?
То есть, из одной задачи я знаю, что при восстановлении объекта мы получаем не тот же самый объект, а его копию (это видно при дебаге)
Также я знаю, что интерфейс Externalizable требует у имплементирующего класса наличие публичного конструктора без параметров (иначе будет ошибка)
Однако, в комментариях, да и при решении одной из задач, пишут, что конструктор не вызывается (цитата из задачи "Подсказка: конструктор не вызывается при десериализации, только инициализируются все поля.")
Так как всё-таки оно работает? Как может создаваться новый объект без вызова конструктора? 🤔
Хотелось бы услышать в подробностях или получить ссылочку на статью (рус/англ), заранее спасибо! :)
Sleepy9
23 уровень
Вызывается ли конструктор при десериализации?
Решен
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Денис Java Developer
1 июня 2023, 18:52
Процесс десериализации (если речь идёт о Serializable) происходит через рефлексию, конкретно создаётся инстанс объекта через no args constructor суперкласса Object. После этого полям присваиваются их значения.
Т.е. технически конструктор таки вызывается, но не совсем тот который ты ожидал увидеть :)
В целом, механизмов сер-де много, некоторые действительно требуют наличия no args constructor непосредственно в классе.
+1
Sleepy9
3 июня 2023, 14:28
Большое спасибо, теперь стало понятнее! :)
0