В этой статье говорится, что одноэлементный шаблон может быть нарушен сериализацией. Для этого можно сериализовать одноэлементный объект, а затем снова десериализовать его до нового набора одноэлементного класса. Затем предлагается решение для реализации метода readResolve()
.
Я сомневаюсь, что мы можем просто запретить сериализацию, сделав синглтон-класс не реализующим Serializable
. Если мы сделаем это, то попытка сериализации одноэлементного экземпляра вызовет java.io.NotSerializableException
Q1. Но тогда почему статья предлагает реализовать readResolve()
?
Q2. Предполагается ли, что по какой-то причине одноэлементному классу может потребоваться возможность сериализации, поэтому требуется реализация Serializable, но все же мы должны убедиться, что он не будет десериализован до 2-го экземпляра, и это может быть достигнуто только путем реализации readResolve()
?
Q3. Если ответ на вопрос Q2 положительный, то можем ли мы гарантировать, что Serializable не будет реализован, когда он не требуется, и не будет реализован readResolve()
, чтобы избежать отрыва синглтона от сериализации-десериализации или нам все еще нужно реализовать readResolve()
?