Unique enum member values

前端 未结 5 1131
星月不相逢
星月不相逢 2021-01-19 14:32

My problem: I want to specify a 1 to 1 connection between two enums. basically:

enum MyEnum{

    ENUM_VALUE_1,
    ENUM_VALUE_2,
    ENUM_VALUE_3,

}

enum          


        
5条回答
  •  萌比男神i
    2021-01-19 15:16

    You can use a static block to test your linkage:

    import java.util.HashSet;
    import java.util.Set;
    
    public class EnumTrick {
      enum MyEnum {
        ENUM_VALUE_1, ENUM_VALUE_2, ENUM_VALUE_3,
      }
    
      enum MyOtherEnum {
    
        OTHER_ENUM_VALUE_1(MyEnum.ENUM_VALUE_3), 
        OTHER_ENUM_VALUE_2(MyEnum.ENUM_VALUE_1),
        OTHER_ENUM_VALUE_3(MyEnum.ENUM_VALUE_2), 
        OTHER_ENUM_VALUE_4(MyEnum.ENUM_VALUE_2);
    
    
        private MyEnum pair;
    
        MyOtherEnum(MyEnum pair) {
          this.pair = pair;
    
        }
    
        static {
          Set usedEnums = new HashSet();
          for(MyOtherEnum moe : MyOtherEnum.values()){
            if(! usedEnums.add(moe.pair) ){
              throw new IllegalArgumentException(moe.pair + " is already used!");
            }
          }
        }
      }
    
      public static void main(String [] args){
        MyOtherEnum moe = MyOtherEnum.OTHER_ENUM_VALUE_1;
      }
    }
    

    Will throw an exception:

    Exception in thread "main" java.lang.ExceptionInInitializerError
      at EnumTrick.main(EnumTrick.java:35)
    Caused by: java.lang.IllegalArgumentException: ENUM_VALUE_2 is already used!
      at EnumTrick$MyOtherEnum.(EnumTrick.java:28)
      ... 1 more
    

提交回复
热议问题