[英]Java - Renaming Enum constants
我正在努力使它能夠編輯枚舉常量的名稱。
我有這些課程:
public class MasterClass implements Serializable {
/**
*
*/
private static final long serialVersionUID = -7117733089486585811L;
private Sex sex;
public Sex getSex(){
return sex;
}
}
。
public class Sex implements Serializable {
/**
*
*/
private static final long serialVersionUID = -4688254148082455942L;
private EnumModel model;
public String print(){
return model.name();
}
public static String print(String n){
return EnumModel.byName(n).name();
}
private static enum EnumModel {
MALE_1(1, 2, 3),
MALE_2(1, 2, 3),
FEMALE_1(1, 2, 3),
FEMALE_2(1, 2, 3)
;
private int x, y, z;
EnumModel(int...is){
x = is[0];
y = is[1];
z = is[2];
}
public static EnumModel byName(String n){
for (EnumModel a : EnumModel.values()){
if (n.toLowerCase().replaceAll(" ", "_").equalsIgnoreCase(a.name().toLowerCase()))
return a;
}
return null;
}
}
}
然后,當我編輯枚舉常量的名稱后,例如,如果我要將MALE_1重命名為MALE_ONE,那么我將收到此錯誤:
Caused by: java.lang.IllegalArgumentException: No enum constant com.masterclass.sex.Sex.EnumModel.MALE_1
at java.lang.Enum.valueOf(Enum.java:238)
at java.io.ObjectInputStream.readEnum(ObjectInputStream.java:1750)
因為MALE_1顯然不再存在,我解決這個問題的唯一方法是刪除已保存的MasterClass並創建一個新的MasterClass。
如何在沒有此問題的情況下重命名常量?
更改Sex類的serialVersionUid並編寫自定義反序列化器(readObject),它會根據需要檢查版本和反序列化。 請參閱http://www.oracle.com/technetwork/articles/java/javaserial-1536170.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.