fork download
  1. import java.lang.reflect.Field;
  2. import java.lang.reflect.ParameterizedType;
  3. import java.lang.reflect.Type;
  4.  
  5. enum Test {
  6. TEST1,
  7. TEST2,
  8. TEST3
  9. }
  10.  
  11. class Ideone {
  12.  
  13. private Test directEnumTypeReference;
  14. private Enum<Test> baseEnumTypeReference;
  15.  
  16. public static void main(String[] args) throws NoSuchFieldException {
  17. Ideone ideone = new Ideone();
  18. ideone.directEnumTypeReference = Test.TEST1;
  19. ideone.baseEnumTypeReference = Test.TEST2;
  20.  
  21. Class directEnumClass = getEnumType("directEnumTypeReference");
  22. ideone.directEnumTypeReference = (Test) Enum.valueOf(directEnumClass, "TEST3");
  23.  
  24. Class baseGenericTypeClass = getEnumType("baseEnumTypeReference");
  25. ideone.baseEnumTypeReference = Enum.valueOf(baseGenericTypeClass, "TEST3");
  26.  
  27. System.out.println(ideone.directEnumTypeReference);
  28. System.out.println(ideone.baseEnumTypeReference);
  29.  
  30. }
  31.  
  32. private static Class<?> getEnumType(String fieldName) throws NoSuchFieldException {
  33. Field field = Ideone.class.getDeclaredField(fieldName);
  34. Type genericFieldType = field.getGenericType();
  35. Class<?> enumType;
  36.  
  37. // Handles Enum<Test>
  38. if (genericFieldType instanceof ParameterizedType) {
  39. ParameterizedType parameterizedType = (ParameterizedType) genericFieldType;
  40. Type actualTypeArgument = parameterizedType.getActualTypeArguments()[0];
  41. enumType = (Class) actualTypeArgument;
  42. }
  43. // Handles Test
  44. else {
  45. enumType = field.getType();
  46. }
  47.  
  48. return enumType;
  49. }
  50. }
Success #stdin #stdout 0.04s 2184192KB
stdin
Standard input is empty
stdout
TEST3
TEST3