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
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