Учитывая, что спецификация является достаточно неясной, чтобы вызвать путаницу и споры, при этом не было получено четкого ответа, остается только один вариант - доверять эмпирическим данным.
Используя примеры из приведенного выше вопроса: FooException
происходит от BarException
из RuntimeException
, а затем удаляется BarException
из цепочки наследования, я собрал пример приложения для проверки сериализации и десериализации. в различных комбинациях.
Я получаю следующие результаты:
Пока я сохраняю serialVersionUID
без изменений, я могу успешно сериализовать и десериализовать исходный FooException
как обновленные FooException
, и и наоборот.
Применяются следующие предостережения:
- Я использую JDK 1.5.0_07 и не пробовал это делать ни в одной другой версии.
FooException
имеет члены типа int
и Exception
, которые успешно десериализованы.
BarException
не добавляет дополнительных членов к RuntimeException
.