(не обязательно) перегружен или даже переопределен.)

тивная Java # 77 утверждает, что мы должны использоватьreadResolve сохранить гарантию Singleton во время сериализации. Они использовали пример.

public class Elvis implements Serializable{
public static final Elvis INSTANCE = new Elvis();
private Elvis() { ... }
public void leaveTheBuilding() { ... }

и они предлагают использовать

Если класс Elvis создан для реализации Serializable, для обеспечения свойства singleton достаточно следующего метода readResolve:

// readResolve for instance control - you can do better!
private Object readResolve() {
// Return the one true Elvis and let the garbage collector
// take care of the Elvis impersonator.
return INSTANCE; }

Этот метод игнорирует десериализованный объект, возвращая выделенный экземпляр Elvis, который был создан при инициализации класса.

Теперь вопрос в том, загружает ли сериализация класс снова, чтобы получить два экземпляра Элвиса?Если класс загружается только один раз, то у нас должен быть только один экземпляр Elvis, поскольку статические поля не сериализуются и не восстанавливаются во время десериализации иОткуда поступает другой экземпляр Elvis, который можно использовать для сборки мусора с помощью readResolve (не допускается выход из процесса десериализации). Это можно объяснить?

Ответы на вопрос(3)

Ваш ответ на вопрос