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

标签 java reflection enums

<分区>

我的问题很简单。
我有一个 java.lang.reflect.Type 类型的变量,如果它包含类或枚举,我想对它做两件不同的事情。我可以通过询问 .isEnum() 来相当简单地检查变量是否为枚举。但是,要调用特定的枚举方法,我需要将此变量转换为枚举。这是一些用于说明的代码。我知道它没有多大意义,但它只是为了 Actor 插图:

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); 

但我无法让它工作。

有什么想法吗?

最佳答案

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

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

但是...转换为 Class 是必要的,因为 java.lang.reflect.Type 只是一个标记接口(interface)。此外,您必须转换为原始类型 Class 才能使其工作。您可能会陷入许多运行时陷阱。

总的来说,有这样的需求是很不礼貌的。为什么您必须使用反射来检索您甚至不知道其类型的枚举值?

关于java - 如何将 java.lang.reflect.Type 转换为枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21483153/

相关文章:

.net - 如何获取程序集的最后修改日期?

c# - 使用反射创建通用委托(delegate)

python - 从 Python 中的字符串列表创建枚举类

java - 哪个更适合静态数据 - final char 还是 enum?

java - Java中关闭静态资源

java - 在 Google Cloud Storage (GCS) 中存储 HashMap 对象

java - 在 servlet 中追加文件

java - 测试 Java 反射、方法句柄和镜像性能

java - 使用 Spring Web 服务时的 Enum 类型转换

java - Spring 安全 : Not able to configure method security with java config