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

3 java reflection methods enums 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));
Run Code Online (Sandbox Code Playgroud)

oxb*_*kes 5

你可能应该这样做:

Enum e = Enum.valueOf(enumClazz, "MyEnumValue");
Run Code Online (Sandbox Code Playgroud)

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

使用反射,您需要传递一个实例来访问 a Field- 但是在静态方法的情况下,您可以按如下方式传入nulltoFieldget方法:

m.invoke(null,f.get(null));
Run Code Online (Sandbox Code Playgroud)

另外 - 是myMethod一种static方法,因为您也没有实例调用它吗?