Newsgroup: it.comp.java
Titolo: Inizializzare serialVersionUID con generatore random di long

Non ho letto guide che mostrassero casi pratici di tecniche per la 
scelta del serialVersionUID impostato nelle proprie classi 
serializzabili, mi pare di aver capito che va bene più o meno un 
qualunque numero purchè tenda a non ripetersi mai.
C'è qualche controindicazione ad attribuire numeri random generati con 
un semplice algoritmo così come ho letto su di un sito?
L'algoritmo sarebbe:
javascript:var 
m=Math;r=m.random;(r()<0.5?'-':'')+m.round(m.pow(10,17)*r())+'L'
da lanciare in un browser web.
Quali sono i vincoli da tenere in considerazione quando si sceglie un 
numero da attribuire al serialVersionUID? Quali sono le situazioni che 
si vogliono evitare?
  grazie anticipatamente per le risposte
-- 
Google Image Labeler cumulative score: 97210


L'importante e che i numeri usati non si ripetano.
Non è necessario che i numeri abbiamo un aspetto casuale, anzi IMHO non 
è affatto una cosa comoda. Puoi semplicemente partire con 0 e poi 
aggiungere +1 ogni volta che modifichi la classe in modo che la 
serializzazione non sia compatibile con la precedente.
-- 
Andrea Francia
http://www.andreafrancia.it/

il 27/10/2008 18.33, Scrive mrzac 43823576:

In tal modo potresti generare numeri non univoci. Direi che esista anche 
un'utility per farlo, io comunque uso questa routine, l'argomento che 
passo alla command line non e' altro che il nome della classe:
public class Genserial {
   public static void main(String[] args) {
     byte[] b = new byte[String.valueOf(Long.MAX_VALUE).length()];
     while(true) {
       Arrays.fill(b, (byte)0);
       try {
	System.in.read(b);
       } catch (IOException e) {
	e.printStackTrace();
       }
       BigInteger bi = new BigInteger(b);
       System.out.println(bi.longValue()+"L");
     }
   }
}
ad esempio:
java Genserial java.util.String
stampa:
8390884978640882176L
Ovviamente questa routine non puo' essere considerata generale, poiche' 
byte[] b accomoda fino a 19 caratteri.
-- 
Dr.Ugo Gagliardelli,Modena,ItalyCertifiedUindoscrasherAñejoAlcoolInside
Spaccamaroni andate a cagare/Spammers not welcome/Spammers vão à merda
Spamers iros a la mierda/Spamers allez vous faire foutre/Spammers loop
schijten/Spammers macht Euch vom Acker/Spamerzy wypierdalac'


In questo modo il serialVersionUID dipenderebbe solo dal nome della 
classe e non da come varia il formato di serializzazione.
Tra l'altro, AFAIK, non è richiesto che due classi diverse abbiamo lo 
stesso serialVersionUID.
-- 
Andrea Francia
http://andreafrancia.blogspot.com/2008/07/colinux-linux-dentro-windows.html

 qualunque numero purchè tenda a non ripetersi mai.
Ecco una guida pratica:
http://mindprod.com/jgloss/serialization.html#SERIALVERSIONUID


 un semplice algoritmo cosě come ho letto su di un sito?
il metodo con cui lo generi non č rilevante. io uso tranquillamente lo 
strumento di eclipse in virtů del fatto che il serialVersionUID ha il 
compito di identificare la versione della classe, quindi *dovrebbe* 
essere modificato quando la classe varia in modo significativo per la 
serializzazione (i.e. viene aggiunto un nuovo field).
-- 
++ Fino all'anno scorso avevo un solo difetto. Ero presuntuoso.
http://unopuntozero.wordpress.com/
http://www.flickr.com/photos/marko_po/

il 27/10/2008 20.30, Scrive Andrea Francia 43823576:

AFAIK anch'io, anzi per quanto AFAIK io devono proprio averlo diverso. :-))
E questo e' l'unico motivo per cui mi ero fatto, anche se banale, un 
generatore. Poi ho smesso di usarlo perche' ad un certo punto ho 
installato un plugin nell'eclipse che lo fa cliccando-destro.
Non mi vergogno a dirlo ma non so piu' dove l'ho preso e nell'update 
manager non figura. Magari lo sa  google.



Mi sono espresso male. Volevo dire il contrario.
Per come l'ho capita io non è necesario che sia diverso, anzi puoi avere 
due classi diverse con lo stesso serialVersionUID.


il 28/10/2008 20.46, Scrive Andrea Francia 43823576:

Ora capisco la tua obiezione, certamente corretta: la cosa importante e' 
che la stessa classe cambi il serialVersionUID quando cambia versione, 
ovvero quando cambia comportamento.
Il mio metodino, in effetti, se non cambia il nome della classe il 
numero non cambia, ma serve solo a dare un valore iniziale, poi e' anche 
facile variarlo magari aggiungendo il numero di versione.
Come dicevo, non lo uso piu', ora ho un plugin che genera il serial per 
una classe o un progetto, pero' si comporta allo stesso modo: stessa 
classe stesso numero. Per cui, quando ritengo che sia il caso, lo 
modifico a mano.


 
Capito. Pensavo che il plugin di eclipse fosse cosě furbo da capire da 
solo quando era ora di cambiare il serialVersionUID.


 
Ce ne sono vari, io ho quello. In realta' a volte cambia, ma non quando 
  mi sembra che sia ora di cambiare, magari ha ragione lui.
