Коли ви використовуєте serialVersionUID (1L), а не створюєте serialVersionUID (3567653491060394677L), ви щось говорите.
Ви говорите, що на 100% впевнені, що жодна система, яка ніколи не торкнеться цього класу, не має сумісної серіалізованої версії цього класу з номером версії 1.
Якщо ви можете придумати будь-який привід для того, щоб його серіалізована історія версій була невідомою, це може бути важко сказати з упевненістю. За все життя успішний клас підтримуватимуть багато людей, житимуть у багатьох проектах та проживатимуть у багатьох системах.
Ви можете мучитися через це. Або ви можете грати в лотерею, сподіваючись програти. Якщо ви генеруєте версію, у вас є невеликі шанси, що все піде не так. Якщо ви припускаєте, "Ей, я вважаю, ще ніхто не використовував 1", шанси вищі, ніж крихітні. Саме тому, що всі ми думаємо, що 0 і 1 круто, ви маєте більші шанси їх вразити.
-
Коли ви генеруєте serialVersionUID (3567653491060394677L), а не використовуєте serialVersionUID (1L), ви щось говорите.
Ви кажете, що люди можуть створити або вручну створити інші номери версій за всю історію цього класу, і вам не байдуже, бо Лонги вигадують великі цифри.
У будь-якому випадку, якщо ви прекрасно не знаєте історію номерів версій, що використовуються при серіалізації класу у всьому Всесвіті, де він є або коли-небудь буде існувати, ви ризикуєте. Якщо у вас є час на 100% впевнитись, що 1 АОК, продовжуйте це робити. Якщо вам доведеться багато працювати, продовжуйте та сліпо генеруйте число. Ви швидше виграєте в лотерею, ніж помилитесь. Якщо це станеться, дайте мені знати, і я куплю вам пиво.
З усією цією розмовою про гру в лотерею я, можливо, створив у вас враження, що serialVersionUID генерується випадковим чином. Насправді, поки діапазон чисел рівномірно розподілений по кожному можливому значенню Довгого, це було б добре. Однак насправді робиться так:
http://docs.oracle.com/javase/6/docs/platform/serialization/spec/class.html#4100
Єдина відмінність, яку ви отримуєте в цьому, - вам не потрібно джерело випадкових випадків. Ви використовуєте зміни в самому класі, щоб змінити результат. Але за принципом голубиної дуги все ж є ймовірність, що вона може піти не так і зіткнутись. Це просто неймовірно малоймовірно. Тож удачі дістати пиво з мене.
Однак, навіть якщо клас буде коли-небудь жити в одній системі та одній базі коду, думка, що збільшення числа вручну дає вам нульовий шанс зіткнення, просто означає, що ви не розумієте людей. :)