При десериализации объекта в Java можно использовать разные способы контроля за значениями. Наиболее распространенными способами являются использование модификатора transient и методов readObject() и readResolve(). Пример использования метода readObject(): private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
if (value < 0) {
throw new InvalidObjectException("Negative value");
}
} В данном примере при десериализации объекта будет проверяться, что значение поля value не является отрицательным. Пример использования метода readResolve(): private Object readResolve() throws ObjectStreamException {
if (this == INSTANCE) {
return INSTANCE;
} else {
return new Singleton();
}
} В данном примере при десериализации объекта будет проверяться, что объект является синглтоном и, если это не так, будет создан новый объект класса Singleton. 1606 вопрос-ответ по Java: https://github.com/DEBA