import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
enum Test {
TEST1,
TEST2,
TEST3
}
class Ideone {
private Test directEnumTypeReference;
private Enum<Test> baseEnumTypeReference;
Ideone ideone = new Ideone();
ideone.directEnumTypeReference = Test.TEST1;
ideone.baseEnumTypeReference = Test.TEST2;
Class directEnumClass = getEnumType("directEnumTypeReference");
ideone.directEnumTypeReference = (Test) Enum.valueOf(directEnumClass, "TEST3");
Class baseGenericTypeClass = getEnumType("baseEnumTypeReference");
ideone.baseEnumTypeReference = Enum.valueOf(baseGenericTypeClass, "TEST3");
System.
out.
println(ideone.
directEnumTypeReference); System.
out.
println(ideone.
baseEnumTypeReference);
}
Field field
= Ideone.
class.
getDeclaredField(fieldName
); Type genericFieldType = field.getGenericType();
Class<?> enumType;
// Handles Enum<Test>
if (genericFieldType instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) genericFieldType;
Type actualTypeArgument = parameterizedType.getActualTypeArguments()[0];
enumType = (Class) actualTypeArgument;
}
// Handles Test
else {
enumType = field.getType();
}
return enumType;
}
}
aW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwppbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuUGFyYW1ldGVyaXplZFR5cGU7CmltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5UeXBlOwoKZW51bSBUZXN0IHsKICAgIFRFU1QxLAogICAgVEVTVDIsCiAgICBURVNUMwp9CgpjbGFzcyBJZGVvbmUgewoKICAgIHByaXZhdGUgVGVzdCBkaXJlY3RFbnVtVHlwZVJlZmVyZW5jZTsKICAgIHByaXZhdGUgRW51bTxUZXN0PiBiYXNlRW51bVR5cGVSZWZlcmVuY2U7CgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIE5vU3VjaEZpZWxkRXhjZXB0aW9uIHsKICAgICAgICBJZGVvbmUgaWRlb25lID0gbmV3IElkZW9uZSgpOwogICAgICAgIGlkZW9uZS5kaXJlY3RFbnVtVHlwZVJlZmVyZW5jZSA9IFRlc3QuVEVTVDE7CiAgICAgICAgaWRlb25lLmJhc2VFbnVtVHlwZVJlZmVyZW5jZSA9IFRlc3QuVEVTVDI7CgogICAgICAgIENsYXNzIGRpcmVjdEVudW1DbGFzcyA9IGdldEVudW1UeXBlKCJkaXJlY3RFbnVtVHlwZVJlZmVyZW5jZSIpOwogICAgICAgIGlkZW9uZS5kaXJlY3RFbnVtVHlwZVJlZmVyZW5jZSA9IChUZXN0KSBFbnVtLnZhbHVlT2YoZGlyZWN0RW51bUNsYXNzLCAiVEVTVDMiKTsKCiAgICAgICAgQ2xhc3MgYmFzZUdlbmVyaWNUeXBlQ2xhc3MgPSBnZXRFbnVtVHlwZSgiYmFzZUVudW1UeXBlUmVmZXJlbmNlIik7CiAgICAgICAgaWRlb25lLmJhc2VFbnVtVHlwZVJlZmVyZW5jZSA9IEVudW0udmFsdWVPZihiYXNlR2VuZXJpY1R5cGVDbGFzcywgIlRFU1QzIik7CgogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpZGVvbmUuZGlyZWN0RW51bVR5cGVSZWZlcmVuY2UpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpZGVvbmUuYmFzZUVudW1UeXBlUmVmZXJlbmNlKTsKCiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgQ2xhc3M8Pz4gZ2V0RW51bVR5cGUoU3RyaW5nIGZpZWxkTmFtZSkgdGhyb3dzIE5vU3VjaEZpZWxkRXhjZXB0aW9uIHsKICAgICAgICBGaWVsZCBmaWVsZCA9IElkZW9uZS5jbGFzcy5nZXREZWNsYXJlZEZpZWxkKGZpZWxkTmFtZSk7CiAgICAgICAgVHlwZSBnZW5lcmljRmllbGRUeXBlID0gZmllbGQuZ2V0R2VuZXJpY1R5cGUoKTsKICAgICAgICBDbGFzczw/PiBlbnVtVHlwZTsKCiAgICAgICAgLy8gSGFuZGxlcyBFbnVtPFRlc3Q+CiAgICAgICAgaWYgKGdlbmVyaWNGaWVsZFR5cGUgaW5zdGFuY2VvZiBQYXJhbWV0ZXJpemVkVHlwZSkgewogICAgICAgICAgICBQYXJhbWV0ZXJpemVkVHlwZSBwYXJhbWV0ZXJpemVkVHlwZSA9IChQYXJhbWV0ZXJpemVkVHlwZSkgZ2VuZXJpY0ZpZWxkVHlwZTsKICAgICAgICAgICAgVHlwZSBhY3R1YWxUeXBlQXJndW1lbnQgPSBwYXJhbWV0ZXJpemVkVHlwZS5nZXRBY3R1YWxUeXBlQXJndW1lbnRzKClbMF07CiAgICAgICAgICAgIGVudW1UeXBlID0gKENsYXNzKSBhY3R1YWxUeXBlQXJndW1lbnQ7CiAgICAgICAgfQogICAgICAgIC8vIEhhbmRsZXMgVGVzdAogICAgICAgIGVsc2UgewogICAgICAgICAgICBlbnVtVHlwZSA9IGZpZWxkLmdldFR5cGUoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBlbnVtVHlwZTsKICAgIH0KfQ==