|
|
|
Supreme 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, подскажите пожалуйста, что это за фигня?
|
|
|
|
|
Supreme Being
      
модератор
Last Login: 03.04.2008 13:12
Сообщ.: 1 297,
Visits: 12 498
|
|
Это 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
Удачи,
Владимир
|
|
|
|
|
Supreme Being
      
участник
Last Login: 30.12.2007 23:06
Сообщ.: 188,
Visits: 1 870
|
|
| Владимир, большое спасибо!
|
|
|
|