это - сериализация коллекций java




Что означает предупреждение «объявить статический финальный serialVersionUID» и как это исправить? (3)

Возможный дубликат:
Что это значит: сериализуемый класс не объявляет статическое окончательное поле serialVersionUID?

Предупреждение компилятора Java: The serializable class [*****] does not declare a static final serialVersionUID field of type long.

Зачем? Как это исправить?


Вы расширяете объект Swing?

Я часто использую аннотацию @suppressWarnings, чтобы избавиться от этого предупреждения.

Я предполагаю, что вопрос о превышении предупреждения или предоставлении уникального идентификатора зависит от масштаба вашего приложения и предполагаемого использования сериализации объектов.


Объявите это так:

private static final long serialVersionUID = -4673040337179571462L;

Это требуется сериализуемым интерфейсом.


просто добавь

private static final long serialVersionUID = 1L;//or some long

java.io.Serializable описывают это довольно хорошо

Среда выполнения сериализации связывает с каждым сериализуемым классом номер версии, называемый serialVersionUID, который используется во время десериализации для проверки того, что отправитель и получатель сериализованного объекта загрузили классы для этого объекта, которые совместимы в отношении сериализации. Если получатель загрузил класс для объекта, который имеет serialVersionUID, отличный от класса соответствующего отправителя, то десериализация приведет к исключению InvalidClassException. Сериализуемый класс может объявить свой собственный serialVersionUID в явном виде, объявив поле с именем "serialVersionUID", которое должно быть статическим, конечным и типа long:

ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;

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

Также см





java