Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> serialVersionUID, что оно такое 
V
    Опции темы
devmstr
Дата 12.4.2007, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Есть код вида:
Код

private class myAction extends AbstractAction

И на него компилер выдает warning:
Код

The serializable class myAction does not declare a static final serialVersionUID field of type long

Что это за поле?


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
powerOn
Дата 12.4.2007, 08:37 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



тут почитай.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
devmstr
Дата 12.4.2007, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



powerOn, 
Спасибо за статью!

Тоесть можно добавить в текст класса:
Код

private static final long serialVersionUID = 3487495895819393L;

И все будет правильно?


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
LSD
Дата 12.4.2007, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Предупреждения не будет.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
devmstr
Дата 12.4.2007, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Не это я то понял, ну а логически это будет правильно?


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
LSD
Дата 12.4.2007, 11:43 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Поле serialVersionUID нужно для того, чтобы в случае изменения твоих классов, не было проблем с десериализацие объектов.

Пример у тебя есть класс:
Код
public class A implements Serializable
{
  public String a;
}

ты его скомпилировал в клиентское и серверное приложения.

Теперь тебе понадобилось там еще одно поле, и ты изменил класс (изменил только на сервере, клиента не трогал):
Код
public class A implements Serializable
{
  public String a;
  public int i;
}

теперь клиент и сервер, не смогут обмениваться данными, т.к. будет ошибка десериализации объекта. У них не будет совпадать serialVersionUID (он динамически вычисляется для класса, по тому какие поля он объявляет).

Чтобы исправить ситуацию, можно сделать так:
Код
public class A implements Serializable
{
  private static final long serialVersionUID = 3487495895819393L;

  public String a;
  public transient int i;
}

где значением serialVersionUID должно быть, то значение которое выдаст утилита serialver для старой версии класса. Тогда десериализация снова заработает, но поле i передаваться не будет.

При желании можно написать свою логику восстановления класса из потока, как это сделать описано в JavaDoc-е по классу Serializable.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
devmstr
Дата 12.4.2007, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



LSD, 
Спасобо! Теперь все понял!


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0475 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.