serialVersionUID больше не требуется с Java 5 и далее? - PullRequest
1 голос
/ 12 сентября 2011

Недавно я прочитал комментарий о том, что использование serialVersionUID для обеспечения совместимости различных версий одного и того же класса для сериализации / десериализации больше не требуется в Java 5 и далее.Это правильно?Может быть, он перепутал с ковариантными типами возврата.Поэтому хотел проверить это со всеми вами.

Ответы [ 2 ]

5 голосов
/ 12 сентября 2011

JavaDocs для Java 5 по-прежнему утверждает, что это необходимо:

Если сериализуемый класс явно не объявляет serialVersionUID, тогда среда выполнения сериализации вычислит значение serialVersionUID по умолчанию для этого класса на основе различных аспектов класса, как описано в Спецификации сериализации объектов Java (TM). Однако настоятельно рекомендуется, чтобы все сериализуемые классы явно объявляли значения serialVersionUID, так как вычисление serialVersionUID по умолчанию очень чувствительно к деталям класса, которые могут варьироваться в зависимости от реализаций компилятора, и, следовательно, могут привести к неожиданным исключениям InvalidClassExceptions во время десериализации. Поэтому, чтобы гарантировать согласованное значение serialVersionUID в различных реализациях Java-компилятора, сериализуемый класс должен объявить явное значение serialVersionUID. Также настоятельно рекомендуется, чтобы в явных объявлениях serialVersionUID использовался модификатор private, если это возможно, поскольку такие объявления применяются только к классу, который был немедленно объявлен, - поля serialVersionUID не используются в качестве унаследованных членов.

3 голосов
/ 12 сентября 2011

Начиная с Java 1.4 вы можете использовать XMLEncoder для сериализации, и это игнорирует любой serialVersionUID, как и большинство других библиотек сериализации.

Однако, если вы используете ObjectOutputStream, его использование serialVersionUID не изменилось.

...