是否可以以兼容的方式更改Serializable类的某些字段的类型?

时间:2015-04-21 10:51:14

标签: java serialization enums

public class SerializableTest implements Serializable
{
    /** field <code>serialVersionUID</code> */
    private static final long serialVersionUID = 3214128409127377143L;

    private String month;

    private int someInt;

    public String getMonth()
    {
        return month;
    }

    public void setMonth(String month)
    {
        this.month = month;
    }

    public int getSomeInt()
    {
        return someInt;
    }

    public void setSomeInt(int someInt)
    {
        this.someInt = someInt;
    }
}

我有这个Serializable类,其中有一个名为month的String字段,当前包含一组固定的常量值 - “Jan”,“Feb”等...

我想重构该类以使用枚举而不是String:

public enum Month
{
    JAN("Jan"),
    FEB("Feb");

    private final String value;

    Month(String value)
    {
        this.value = value;
    }

    public String value() {
        return value;
    }

    public static Month fromValue(String v) {
        for (Month c: Month.values()) {
            if (c.value.equals(v)) {
                return c;
            }
        }
        throw new IllegalArgumentException(v);
    }
}

是否可以以兼容的方式执行此操作? 我怀疑我需要提供枚举月的自定义可序列化形式,但我不确定如何做到这一点。

1 个答案:

答案 0 :(得分:1)

要向后兼容,您无法更改类型,但添加新字段。并在反序列化后更新新字段。

在迁移完所有数据后,您只需删除旧字段。