Назад к вопросам
Middle+
70
questionbank
В чем заключается проблема сериализации при использовании паттерна Singleton?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
При сериализации Singleton-объекта по умолчанию теряется гарантия уникальности экземпляра.
Причина:
- Метод
readObject()по умолчанию создает новый экземпляр класса при десериализации.
Проблема:
- Вместо получения ссылки на существующий единственный экземпляр, после десериализации создается второй, а то и третий экземпляр Singleton-класса.
Решение:
- Реализовать в классе Singleton метод
readResolve(). Этот метод вызывается после десериализации объекта и должен возвращать существующий экземпляр.
public class Singleton implements Serializable {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {
// Защита от рефлексии
if (INSTANCE != null) {
throw new IllegalStateException("Singleton already initialized.");
}
}
public static Singleton getInstance() {
return INSTANCE;
}
// Метод readResolve() для предотвращения создания нового экземпляра при десериализации
protected Object readResolve() {
return INSTANCE;
}
}