如何将java.lang.reflect.Type转换为枚举?

时间:2014-01-31 15:02:35

标签: java reflection enums

我有一个相当简单的问题 我有一个java.lang.reflect.Type类型的变量,我希望在它保持类或枚举的情况下做两件不同的事情。我可以通过简单地询问.isEnum()来相当简单地检查变量是否为枚举。但是,要调用特定的枚举方法,我需要将此变量强制转换为枚举。这是一些用于说明的代码。我知道它并没有太大的意义,但它只是为了演员的插图:

public class TestClass {
    public static String text = "MySampleTextClass.";
}
public enum TestEnum {
    MySampleText
}
public class Tester {
    public static Object retrieveValue (java.lang.reflect.Type myVar, String enumStringValue) {
        String enumStringValue = "MySampleText";

        // the variable is enum!!!
        if (myVar.isEnum()) {
            return (Enum myVar).valueOf(enumStringValue);
        }
        // the variable is class!!!
        else {
            return myVar.getClass().getSimpleName();
        }
    }
}

我试过像

这样的演员
(java.lang.Enum myVar).valueOf(enumString);

(java.lang.Enum<?> myVar).valueOf(enumString); 

但我不能让它发挥作用。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

使用抽象类valueOf中声明的静态方法Enum

Class clazz = (Class) myVar;
if (clazz.isEnum()) {
    return Enum.valueOf(clazz, enumStringValue);
}

但是......由于java.lang.reflect.Type只是一个标记接口,因此需要强制转换为Class。此外,您必须强制转换为原始类型Class才能使其正常工作。您可以进入许多运行时陷阱。

总的来说,有这样的要求是非常简单的。为什么你必须使用反射来检索你甚至不知道类型的枚举值?