Quando usi serialVersionUID (1L) anziché generare serialVersionUID (3567653491060394677L) stai dicendo qualcosa.
Stai dicendo che sei sicuro al 100% che nessun sistema toccherà mai questa classe che ha una versione serializzata incompatibile di questa classe con un numero di versione 1.
Se riesci a pensare a qualche scusa perché la sua cronologia delle versioni serializzata fosse sconosciuta, potrebbe essere difficile dirlo con sicurezza. Durante la sua vita, una classe di successo sarà gestita da molte persone, vivrà in molti progetti e risiederà in molti sistemi.
Puoi soffrire per questo. Oppure puoi giocare alla lotteria sperando di perdere. Se generi la versione hai una piccola possibilità che qualcosa vada storto. Se supponi "Ehi, scommetto che nessuno ha ancora usato 1" le tue probabilità sono più grandi che minuscole. È proprio perché tutti pensiamo che 0 e 1 siano belli che hai maggiori probabilità di colpirli.
-
Quando generi serialVersionUID (3567653491060394677L) anziché utilizzare serialVersionUID (1L) stai dicendo qualcosa.
Stai dicendo che le persone potrebbero aver creato o generato manualmente altri numeri di versione nella storia di questa classe e non ti interessa perché Longs sta dando di matto grandi numeri.
In entrambi i casi, a meno che tu non conosca perfettamente la storia dei numeri di versione utilizzati durante la serializzazione della classe nell'intero universo di dove è o sarà mai esistita, stai correndo una possibilità. Se hai il tempo di assicurarti che il 100% sia 1 AOK, provalo. Se questo richiede molto lavoro, vai avanti e genera il numero alla cieca. Hai più probabilità di vincere alla lotteria che di sbagliare. Se lo fa, fammi sapere e ti comprerò una birra.
Con tutto questo parlare di giocare alla lotteria potrei averti dato l'impressione che serialVersionUID sia generato casualmente. In effetti, fintanto che l'intervallo di numeri è uniformemente distribuito su ogni possibile valore di un Long, ciò andrebbe bene. Tuttavia, in realtà è fatto in questo modo:
http://docs.oracle.com/javase/6/docs/platform/serialization/spec/class.html#4100
L'unica differenza che ottieni è che non hai bisogno di una fonte di casualità. Stai usando le modifiche nella stessa classe per cambiare il risultato. Ma secondo il principio del piccione c'è ancora una possibilità che possa andare storto e avere una collisione. È semplicemente incredibilmente improbabile. Buona fortuna a farmi una birra.
Tuttavia, anche se la classe vivrà in un solo sistema e in una base di codice, pensare che incrementare il numero a mano non dia alcuna possibilità di collisioni significa solo che non capisci gli umani. :)