[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-serializatsiya-v-chem-problema-serializatsii-singleton":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},978,"v-chem-problema-serializatsii-singleton",30,"serializatsiya","Сериализация","📦","В чем проблема сериализации Singleton?","При десериализации JVM создаёт **новый** экземпляр объекта, минуя приватный конструктор, что нарушает контракт Singleton — в системе оказывается два экземпляра вместо одного.\n\n```java\nSingleton original = Singleton.getInstance();\n\n\u002F\u002F Сериализация → десериализация\nSingleton deserialized = (Singleton) ois.readObject();\n\nSystem.out.println(original == deserialized); \u002F\u002F false — два экземпляра!\n```\n\n### Решения\n\n**1. Метод readResolve** — возвращает существующий экземпляр вместо десериализованного:\n\n```java\npublic class Singleton implements Serializable {\n    private static final Singleton INSTANCE = new Singleton();\n\n    private Singleton() {}\n\n    public static Singleton getInstance() { return INSTANCE; }\n\n    private Object readResolve() throws ObjectStreamException {\n        return INSTANCE; \u002F\u002F Вместо нового объекта возвращаем существующий\n    }\n}\n```\n\n**2. enum-Singleton** — рекомендуемый подход, JVM гарантирует единственность:\n\n```java\npublic enum Singleton {\n    INSTANCE;\n\n    public void doSomething() { \u002F* ... *\u002F }\n}\n```\n\nEnum-синглтон защищён от десериализации, рефлексии и клонирования «из коробки».\n\n**3. Запрет сериализации** — если сериализация не нужна, выбросить `NotSerializableException`.\n\n> **На собеседовании:** назовите проблему (десериализация создаёт новый экземпляр), опишите решение через `readResolve` и порекомендуйте `enum`-подход как самый надёжный. Это один из самых популярных вопросов на стыке паттернов и сериализации.","","middle",[15],"serialization",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"В чем проблема сериализации Singleton? — Gymterview","При десериализации JVM создаёт **новый** экземпляр объекта, минуя приватный конструктор, что нарушает контракт Singleton — в системе оказывается два экземпляра ","При десериализации JVM создаёт **новый** экземпляр объекта, минуя приватный конструктор, что нарушает контракт Singleton",[15,13],"При десериализации JVM создаёт **новый** экземпляр объекта, минуя приватный конструктор, что нарушает контракт Singleton — в системе оказывается два экземпляра вместо одного.",true]