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)
你可能应该这样做:
Enum e = Enum.valueOf(enumClazz, "MyEnumValue");
Run Code Online (Sandbox Code Playgroud)
当您使用原始类型时,您将收到未经检查的警告,但这将编译和运行。
使用反射,您需要传递一个实例来访问 a Field
- 但是在静态方法的情况下,您可以按如下方式传入null
toField
的get
方法:
m.invoke(null,f.get(null));
Run Code Online (Sandbox Code Playgroud)
另外 - 是myMethod
一种static
方法,因为您也没有实例调用它吗?