Middle+
178
Чаро мушкилоти сериалкунонӣ дар истифодаи намунаи Singleton?
Ҷавоб аз AI
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 вече е инициализиран.");
}
}
public static Singleton getInstance() {
return INSTANCE;
}
// Метод readResolve() за предотвратяване на създаването на нов екземпляр при десериализация
protected Object readResolve() {
return INSTANCE;
}
}