В чем проблема сериализации Singleton

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

Ответ

Сериализация Singleton нарушает его принцип единственного экземпляра. При десериализации создается новый объект, даже если конструктор приватный.

Решение:

  1. Реализовать readResolve() в классе Singleton:
protected Object readResolve() {
    return getInstance();
}
  1. Использовать enum (наиболее надежный способ):
public enum Singleton {
    INSTANCE;
    // методы и поля
}

enum гарантирует единственность экземпляра даже при сериализации/десериализации.