Is custom enum Serializable too?

前端 未结 3 858
北海茫月
北海茫月 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:02

    The serialization of enum members is not working. The nonSerializable field is never serialized as @vmironov answered. Here is a test:

    public enum Country {
    Australia;
    
        public static class NonSerializableClass {
           public NonSerializableClass() {}
           public String dummy;
        }
    
        public NonSerializableClass nonSerializableClass;
    }
    

    The code writing the enum to the serialization stream:

    public class SerializationTestWrite {
        public static void main(String[] args) throws Exception{
            FileOutputStream f = new FileOutputStream("tmp");
            ObjectOutput s = new ObjectOutputStream(f);
    
            Country.Australia.nonSerializableClass = new Country.NonSerializableClass();
            Country.Australia.nonSerializableClass.dummy = "abc";
    
            s.writeObject(Country.Australia);
            s.flush();
    
            System.out.println(Country.Australia.nonSerializableClass.dummy);
        }
    }    
    

    On writing the value of the dummy field is: abc

    The code reading the enum from the serialization stream:

    public class SerializationTestRead {
        public static void main(String[] args) throws Exception{
            FileInputStream in = new FileInputStream("tmp");
            ObjectInputStream so = new ObjectInputStream(in);
            Country readed = (Country) so.readObject();
    
            System.out.println(readed.nonSerializableClass);
        }
    }
    

    But on reading, the value of the field nonSerializableClass is: null

提交回复
热议问题