java - 将反射的枚举传递给 method.invoke java

标签 java reflection enums methods invoke

如果您有一个通过反射访问的枚举,您将如何将它的值传递给 method.invoke 调用。

会不会像(为简单起见显示为静态方法)


    Class enumClazz = Class.forName("mypkg.MyEnum",true,MyClassLoader);
    Class myReflectedClazz = Class.forName("mypkg.MyClass",true,MyClassLoader);
    Field f = enumClazz.getField("MyEnumValue");

    Method m = myReflectedClazz.getMethod("myMethod",enumClazz);
    m.invoke(null,f.get(null));

最佳答案

你可能应该这样做:

Enum e = Enum.valueOf(enumClazz, "MyEnumValue");

当您使用原始类型时,您将收到未检查 警告,但这将编译并运行。

使用反射,您需要传递一个实例来访问 Field - 但是在静态方法的情况下,您可以将 null 传递给 Field get方法如下:

m.invoke(null,f.get(null));

此外 - myMethod 是一个 static 方法吗,因为您也在没有实例的情况下调用它?

关于java - 将反射的枚举传递给 method.invoke java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1278523/

相关文章:

c++ - 什么是枚举类,我为什么要关心?

java - 如何在 nanohttpd 中发送 JSON 数据作为响应

java - jackson 反序列化问题与 map 中的 final类

java - Java/Android 中 |= 是什么意思? (按位或赋值)

java - Java 中的最小值不起作用

haskell - 使用 Data 和 Typeable 获取构造函数的参数类型

reflection - ceylon 元模型

java - Kotlin 无法获取正确的枚举实例

c# - Assembly.ReflectionOnlyLoadFrom 不工作

java - 枚举作为 Java 中常量的替代品