Имеет значение, что я выбираю для serialVersionUID при расширении сериализуемых классов в Java?

Вот полное решение, использующее подход Collections.shuffle:

public static void shuffleArray(int[] array) {
  List<Integer> list = new ArrayList<>();
  for (int i : array) {
    list.add(i);
  }

  Collections.shuffle(list);

  for (int i = 0; i < list.size(); i++) {
    array[i] = list.get(i);
  }    
}

Обратите внимание, что он страдает из-за невозможности плавного перехода между int[] и Integer[] (и, следовательно, int[] и List<Integer>).

42
задан Hanno Fietz 3 March 2009 в 20:06
поделиться

2 ответа

Нет - пока Вы изменяете его в нужное время (т.е. когда Вы вносите изменение, которое влияет на сериализацию, например, удаление поля) не должно иметь значения, что оценивает Вас использование.

Для простоты я предложил бы запуститься с 0, и увеличить ее к 1 каждому разу Вы должны.

спецификация сериализации имеет больше деталей.

71
ответ дан Jon Skeet 23 September 2019 в 13:50
поделиться

Единственная вещь, которая имеет значение для serialVersionUID, состоит в том, что совместимые с двоичным файлом сериализированные версии класса имеют тот же serialVersionUID; это - то, если Вы не внесли изменений повреждения в сериализированную форму класса, это будет прекрасно.

, Конечно, более оптимальный вариант состоит в том, чтобы использовать расширенные настройки, которые сериализация делает доступным для Вас так, чтобы никогда не было никаких изменений повреждения. Я предложил бы читать о readResolve () и др., Эффективный Java охватывает некоторые более тернистые проблемы в этой области подробно.

13
ответ дан GaryF 23 September 2019 в 13:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: