itemprop="text">
Eclipse issues warnings when a
            serialVersionUID is missing.
            
 The serializable
            class Foo does not declare a static final
 serialVersionUID field of type
            long
What
            is serialVersionUID and why is it important? Please show an
            example where missing serialVersionUID will cause a
            problem.
              The docs for             href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/Serializable.html"
            rel="noreferrer">java.io.Serializable are probably
            about as good an explanation as you'll
            get:
 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
            
             href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/InvalidClassException.html"
            rel="noreferrer">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.
  
No comments:
Post a Comment