2017-05-06 10 views
1

열거 형 상수 이름을 편집 할 수 있도록 노력 중입니다.자바 - 열거 형 이름 바꾸기

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_ONE에 MALE_1 이름을 바꿀 수 있다면 그럼 예를 들어, 열거 형 정수의 이름을 편집 할 때 후, 나는이 오류가 발생합니다 :

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를 만드는 것입니다.

이 문제없이 상수 이름을 어떻게 바꿉니 까?

+0

IDE를 사용하여 이름을 바꾸면 모든 용도가 업데이트됩니다. – Bohemian

+0

직렬화 된 데이터를 읽는 것처럼 보입니다. Class/Enum이 직렬화 된 데이터와 더 이상 일치하지 않으면 작동하지 않습니다. – Tom

+0

이클립스의 굴절 툴을 사용하고 있습니다. 동일한 오류 –

답변

0

변경 될 때 Sex 클래스의 serialVersionUid를 업데이트하고 버전을 확인하고 적절하게 비 직렬화하는 사용자 정의 직 병렬 변환기 (readObject)를 작성하십시오. http://www.oracle.com/technetwork/articles/java/javaserial-1536170.html

+0

정말이 옵션이 맞습니까? 과도한 것 같습니다 –

+0

원하는 것을 할 수 있습니다. 이름 바꾸기 만하고 싶다면 enum을 int로 직렬화 할 수 있습니다. –