Десериализация Java: как обойти InvalidObjectException для отсутствующих перечислений - PullRequest
0 голосов
/ 29 августа 2018

Я работаю над десериализацией больших файлов, которые должны быть поддержаны будущими версиями программного обеспечения в будущем, которые имеют различные атрибуты. Я использовал readObject () во многих местах для добавления поддержки управления версиями, однако есть одна вещь, которую я не совсем уверен, как это исправить.

java.io.InvalidObjectException: enum constant ENUM_NAME does not exist in class

Как ты справляешься с этим? Как добавить функцию перечисления readObject () - esque в перечисление, чтобы разрешить управление версиями этого перечисления (т. Е. Возвращать нулевое значение для перечисления или т. Д.), Когда загрузка этого конкретного перечисления не удалась?

Насколько я понимаю, вы не можете просто добавить readObject () в перечисления, так как Java обрабатывает их десериализацию по-разному. Или я ошибаюсь? Трудно гуглить тему и найти мою конкретную проблему. Мне действительно нужен способ обработки версий перечислений.

Заранее благодарю за помощь.

EDIT: Я знаю, что здесь есть похожий вопрос: Обработка десериализации значений enum, которые больше не существуют

Я бы хотел оставить вопрос открытым для обсуждения, поскольку этот пост был сделан в 2012 году (и его последующий ответ был сделан в 2014 году), и более новые версии Java могут иметь новые решения проблемы. Спасибо.

...