Как сериализовать Singleton

«Как сериализовать Singleton» — вопрос из категории Java, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Сериализация Singleton требует особого подхода, чтобы избежать создания дубликатов при десериализации. Решение — реализовать readResolve():

object Singleton : Serializable {
    // Защита от создания дубликата при десериализации
    private fun readResolve(): Any = Singleton
}

Или для Java-стиля:

public class Singleton implements Serializable {
    private static final Singleton INSTANCE = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {
        return INSTANCE;
    }

    // Критически важный метод для сохранения Singleton
    protected Object readResolve() {
        return INSTANCE;
    }
}

При десериализации JVM вызывает readResolve(), возвращая существующий экземпляр вместо создания нового. Также можно использовать enum — они по умолчанию корректно обрабатывают сериализацию.