What is the reason for explicitly declaring default Java class serialization methods?

I periodically see Java classes with the following structure:

class MyClass implements Serializable {

    private static final long serialVersionUID = 1L;

    // ...

    private void writeObject(final java.io.ObjectOutputStream s) throws IOException {
        s.defaultWriteObject();
    }

    private void readObject(final java.io.ObjectInputStream s) throws IOException, ClassNotFoundException {
        s.defaultReadObject();
    }

}

As I understand it, for serialization by default you need to declare an interface implementation serializableand define serialVersionUID. Is there any reason for declaring write / read methods using only the standard implementation? I'm tired of analyzer warnings about code duplication.

You do not see a really clear guide for this topic. Everything is either somewhat outdated or rather subjective.

+4
source share
2 answers

ObjectInputStream # defaultReadObject ObjectOutputStream # defaultWriteObject , , , . -, Serializable.

Java, , 1.7 ( Serializable Fields ) :

, Serializable, . , , . writeObject readObject, , defaultWriteObject defaultReadObject. writeObject readObject , .

+3

writeObject readObject, . serialVersionUID :

serialVersionUID, serialVersionUID , Java (TM). , , serialVersionUID, serialVersionUID , , , InvalidClassExceptions . , serialVersionUID java-, serialVersionUID. , serialVersionUID , , , , : classVersionUID . serialVersionUID, , serialVersionUID .

http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html

+1

All Articles