Ответ
Сериализация Singleton нарушает его принцип единственного экземпляра. При десериализации создается новый объект, даже если конструктор приватный.
Решение:
- Реализовать
readResolve()в классе Singleton:
protected Object readResolve() {
return getInstance();
}
- Использовать
enum(наиболее надежный способ):
public enum Singleton {
INSTANCE;
// методы и поля
}
enum гарантирует единственность экземпляра даже при сериализации/десериализации.