| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > serialVersionUID |
| Автор: devmstr 12.4.2007, 07:55 | ||||
Есть код вида:
И на него компилер выдает warning:
Что это за поле? |
| Автор: powerOn 12.4.2007, 08:37 |
| http://forum.java.sun.com/thread.jspa?threadID=515351&messageID=2454326 почитай. |
| Автор: devmstr 12.4.2007, 10:49 | ||
| powerOn, Спасибо за статью! Тоесть можно добавить в текст класса:
И все будет правильно? |
| Автор: LSD 12.4.2007, 11:25 |
| Предупреждения не будет. |
| Автор: devmstr 12.4.2007, 11:28 |
| Не это я то понял, ну а логически это будет правильно? |
| Автор: LSD 12.4.2007, 11:43 | ||||||
| Поле serialVersionUID нужно для того, чтобы в случае изменения твоих классов, не было проблем с десериализацие объектов. Пример у тебя есть класс:
ты его скомпилировал в клиентское и серверное приложения. Теперь тебе понадобилось там еще одно поле, и ты изменил класс (изменил только на сервере, клиента не трогал):
теперь клиент и сервер, не смогут обмениваться данными, т.к. будет ошибка десериализации объекта. У них не будет совпадать serialVersionUID (он динамически вычисляется для класса, по тому какие поля он объявляет). Чтобы исправить ситуацию, можно сделать так:
где значением serialVersionUID должно быть, то значение которое выдаст утилита serialver для старой версии класса. Тогда десериализация снова заработает, но поле i передаваться не будет. При желании можно написать свою логику восстановления класса из потока, как это сделать описано в JavaDoc-е по классу Serializable. |
| Автор: devmstr 12.4.2007, 12:02 |
| LSD, Спасобо! Теперь все понял! |