Здесь возможно решение вашего конкретного c вопроса. Обратите внимание на метод:
Enum myEnum = getEnumValueFromTwoDifferentEnumsByName (FirstEnum.class, SecondEnum.class, enumValueName);
public enum FirstEnum {
A, B;
}
public enum SecondEnum {
C, D;
}
//Enums will throw NPE when the value is not found so we have to handle this first
public static Enum<?> getEnumValueNoException(Class<? extends Enum> enumeration, String valueName) {
try {
return Enum.valueOf(enumeration, valueName);
} catch (NullPointerException e) {
return null;
}
}
public static Enum<?> getEnumValueFromTwoDifferentEnumsByName(Class<? extends Enum> enum1, Class<? extends Enum> enum2, String enumValueName) {
Enum<?> possibility1 = getEnumValueNoException(enum1, enumValueName);
Enum<?> possibility2 = getEnumValueNoException(enum2, enumValueName);
if (possibility1 == null && possibility2 == null) {
throw new NullPointerException("Found no valid enum values for name " + enumValueName + " in enums " + enum1 + " and " + enum2);
}
return possibility1 != null ? possibility1 : possibility2;
}
public static void main(String[] args) throws Exception {
String enumValueName = "A";
Enum<?> myEnum = getEnumValueFromTwoDifferentEnumsByName(FirstEnum.class, SecondEnum.class, enumValueName);
System.out.println(myEnum);
}