gpt4 book ai didi

Java - 重命名枚举常量

转载 作者:太空宇宙 更新时间:2023-11-04 11:30:51 25 4
gpt4 key购买 nike

我正在尝试这样做,以便我可以编辑枚举常量的名称。

我有这些类(class):

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

关于Java - 重命名枚举常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43819840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com