我有一个相当简单的问题
我有一个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);
但我不能让它发挥作用。
有什么想法吗?
答案 0 :(得分:3)
使用抽象类valueOf
中声明的静态方法Enum
:
Class clazz = (Class) myVar;
if (clazz.isEnum()) {
return Enum.valueOf(clazz, enumStringValue);
}
但是......由于java.lang.reflect.Type只是一个标记接口,因此需要强制转换为Class。此外,您必须强制转换为原始类型Class才能使其正常工作。您可以进入许多运行时陷阱。
总的来说,有这样的要求是非常简单的。为什么你必须使用反射来检索你甚至不知道类型的枚举值?