Насправді, ви не повинні «генерувати» серійні UID. Це німа "особливість", яка випливає із загального нерозуміння того, як цей ID використовує Java. Ви повинні давати цим ідентифікованим значущим, читабельним значенням, наприклад, починаючи з 1L та збільшуючи їх щоразу, коли ви думаєте, що нова версія класу повинна зробити всі попередні версії (які раніше можуть бути серіалізовані) застарілими. Усі утиліти, які генерують такі ідентифікатори, в основному роблять те, що робить JVM, коли ідентифікатор не визначений: вони генерують значення на основі вмісту файлу класу, отже, виходять з нечитабельними безглуздими довгими цілими числами. Якщо ви хочете, щоб кожна версія вашого класу була чіткою (в очах JVM), тоді вам навіть не слід вказувати значення serialVersionUID, тому JVM видасть його на льоту, і значення кожної версії вашого класу буде унікальною. Метою чіткого визначення цього значення є вказівка механізму серіалізації для обробки різних версій класу, які мають однаковий SVUID, як ніби вони однакові, наприклад, не відхиляти старі серіалізовані версії. Отже, якщо ви визначаєте ідентифікатор і ніколи не змінюєте його (і я вважаю, що це ви робите, оскільки ви покладаєтесь на автогенерацію, і ви, ймовірно, ніколи не повторно генеруєте свої ідентифікатори), ви гарантуєте, що всі - навіть абсолютно різні - версії ваш клас буде вважатися таким же механізмом серіалізації. Це те, чого ти хочеш? Якщо ні, і якщо ви дійсно хочете мати контроль над тим, як ваші об’єкти розпізнаються, вам слід використовувати прості значення, які ви самі можете зрозуміти та легко оновити, коли вирішите, що клас суттєво змінився.
Сподіваюсь, це допомагає. Удачі.
1L
, свій ідентифікатор та приріст, коли ваша серіалізована форма зміниться. (Див. Stackoverflow.com/questions/888335/… ).