如果您有一个通过反射访问的枚举,您将如何将它的值传递给 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/