... does not declare a static final serialVersionUID...
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



... does not declare a static final... Expand / Collapse
Автор
Сообщение
04.09.2007 9:31
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 30.12.2007 23:06
Сообщ.: 188, Visits: 1 870
Приветствую Всех.
Пришлось пересесть с JBuilder на Eclipse и получаю такое сообщение:
The serializable class MyClassName does not declare a static final serialVersionUID field of type long.
Фаны Eclipse, подскажите пожалуйста, что это за фигня?
Сообщ. #915733
05.09.2007 11:41
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 09.07.2008 2:17
Сообщ.: 1 298, Visits: 12 500
Это ID указывающе на версию класса, которое используется при сериализации/десериализации, если это ID явно не определено, то оно генерируется автоматически на стадии компиляции. Алгоритм генерации ID, теоретически, позволяет иметь уникальные и в тоже время одинаковые ID для совместимых классов, все бы ничего, но компилятор Eclipse и компилятор Sun генерируют это самое ID по разным алгоритмам.

Поэтому при отладке распределенных приложений (например, с EJB) из Eclipse'a частенько возникают проблемы вида клиент или сервер не может десериализовать объект класса ввиду того что класс на клиенте имеет ID (сгенерированное Eclipse'ом) отличное от ID на сервере (сгенерированное Sun-компилятором).

Лечится все это дело простым добавлением следующей строчки в определение класса:

private static final long serialVersionUID = 1234L;

Где 1234 - уникальный номер версии данного класса. Другими словами, если класс изменился таким образом что он больше не совместим со старыми классами для десериализации, то serialVersionUID должно поменяться, если изменения произошли лишь в логике функций, то в принципе, ID можно сохранить.

Если отладка распределенных приложений не планируется из Eclipse, то предупреждение можно игнорировать и настроить в Windows->Preferences...: Java->Compiler->Errors/Warnings: Potential programming problems->Serializable class without serialVersionUID: Ignore


Удачи,
Владимир
Сообщ. #915771
06.09.2007 10:07
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 30.12.2007 23:06
Сообщ.: 188, Visits: 1 870
Владимир, большое спасибо!
Сообщ. #915786
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, mishgun, pl

Время GMT +3:00, Сейчас 5:15