Is custom enum Serializable too?

前端 未结 3 870
北海茫月
北海茫月 2020-11-27 03:32

I understand Enum is Serializable. Hence, it is safe to do so. (selectedCountry is enum Country)

Original enum without customer member var

3条回答
  •  清歌不尽
    2020-11-27 04:08

    As per Serializable documentation, readObject and writeObject are not needed at all, so your question might be not fully correct.

    Serializable is a marker interface and doesn't have any methods.

    I refer you to this answer which provides additional details about the Serialization implementation (which explains why you don't necessary need write and read functions).

    And, as mentioned here by Dianne Hackborn, Parcelable is much more efficient for Android.

    If you're particularly interested in Enum, refer to below paragraph:

    1.12 Serialization of Enum Constants

    Enum constants are serialized differently than ordinary serializable or externalizable objects. The serialized form of an enum constant consists solely of its name; field values of the constant are not present in the form. To serialize an enum constant, ObjectOutputStream writes the value returned by the enum constant's name method. To deserialize an enum constant, ObjectInputStream reads the constant name from the stream; the deserialized constant is then obtained by calling the java.lang.Enum.valueOf method, passing the constant's enum type along with the received constant name as arguments. Like other serializable or externalizable objects, enum constants can function as the targets of back references appearing subsequently in the serialization stream.

    The process by which enum constants are serialized cannot be customized: any class-specific writeObject, readObject, readObjectNoData, writeReplace, and readResolve methods defined by enum types are ignored during serialization and deserialization. Similarly, any serialPersistentFields or serialVersionUID field declarations are also ignored--all enum types have a fixed serialVersionUID of 0L. Documenting serializable fields and data for enum types is unnecessary, since there is no variation in the type of data sent.

    So, I don't think that the Enum is the right choice to test internal non-serializable classes work.

提交回复
热议问题