Newsgroup: it.comp.java
Titolo: Spiegazione

Qualcuno sà cosa sia il serialVersionUID, introdotto con java 5?


Dovresti specificare in che contesto, in alcuni casi esiste dalla 
versione 1.4 del JDK. Comunque:
In RMI:
    static final long serialVersionUID
    indicate compatibility with JDK 1.1.x version of class.
In Crittografia:
    static final long serialVersionUID
    The class fingerprint that is set to indicate serialization 
compatibility with a previous version of the class.
Come puoi vedere dalla documentazione api del framework: 
http://java.sun.com/j2se/1.5.0/docs/api/

Nel contesto delle classi Serializable.
Quando provavo a compilare delle classi(Che giravano normalmente con
java 1.4) con il compilatore di java 5 mi dava un warning, in cui mi
diceva di specificare un serialVersionUID.

 Qualcuno sà cosa sia il serialVersionUID, introdotto con java 5?
The serialization runtime associates with each serializable class a 
version number, called a serialVersionUID, which is used during 
deserialization to verify that the sender and receiver of a serialized 
object have loaded classes for that object that are compatible with 
respect to serialization. If the receiver has loaded a class for the 
object that has a different serialVersionUID than that of the 
corresponding sender's class, then deserialization will result in an 
InvalidClassException. A serializable class can declare its own 
serialVersionUID explicitly by declaring a field named 
"serialVersionUID" that must be static, final, and of type long:
  ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;
  If a serializable class does not explicitly declare a 
serialVersionUID, then the serialization runtime will calculate a 
default serialVersionUID value for that class based on various aspects 
of the class, as described in the Java(TM) Object Serialization 
Specification. However, it is strongly recommended that all serializable 
classes explicitly declare serialVersionUID values, since the default 
serialVersionUID computation is highly sensitive to class details that 
may vary depending on compiler implementations, and can thus result in 
unexpected InvalidClassExceptions during deserialization. Therefore, to 
guarantee a consistent serialVersionUID value across different java 
compiler implementations, a serializable class must declare an explicit 
serialVersionUID value. It is also strongly advised that explicit 
serialVersionUID declarations use the private modifier where possible, 
since such declarations apply only to the immediately declaring 
class--serialVersionUID fields are not useful as inherited members
Saluti
CarMas

kaiser...@gmail.com
 ha scritto:

Quando compili con javac 1.4.2 ad esempio il bytecode di una classe 
serializzata avrŕ una sua struttura, se compili con javac 1.5.0 potrebbe 
differire in alcuni aspetti, perciň č bene ridefinire nelle classi da 
serialzzare l'attributo serialVersionUID in modo da rendere compatibili 
i vari bytecodes... Se non difinisci niente ci pensa il compilatore a 
stabilire la versione perň ti da in output il messaggio di warning. La 
guida del JDK 1.5.0. riporta questo esempio nell'interfaccia Serializable:
ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;
dove ANY-ACCESS-MODIFIER lo preferisco di tipo PRIVATE.
Puoi far riferimento qui se vuoi sapere di piů sulla serializzazione:
http://java.sun.com/j2se/1.5.0/docs/guide/serialization/spec/serialTOC.html

Grazie a tutti :-)

Grazie :)