У меня есть класс Serializable
, который используется в производстве примерно с 2004 года. Однако парень, который написал его, забыл сгенерировать serialVersionUID
.
Все это работает (есть большое замечание, предупреждающее, что в классе ничего не трогать), но при работе в другом связанном классе у меня было InvalidCastException
, поэтому я хочу добавить serialVersionUID
чтобы убедиться, что класс работает правильно.
Вопрос в том, возможно ли добавить такое поле, не нарушая существующие сериализованные экземпляры? Их много, и нет простого способа их изменить.
Моя идея пришла от просмотра сообщения об исключении, которое выглядит примерно так:
java.io.InvalidClassException: the.problematic.Class; local class incompatible: stream classdesc serialVersionUID = -8802277085918151566, local class serialVersionUID = -3137213695071887162"
Я подумал, что мог бы использовать неявный последовательный (потоковый classdesc в трассировке) в качестве последовательного, и он должен сохранять обратную совместимость. Это правильно? Я (более или менее) уверен, что все сериализованные экземпляры, которые мы получили в системе, имеют одинаковую версию.