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