[英]pass reflected enum to method.invoke java
如果您有一個通過反射訪問的枚舉,將如何將其值傳遞給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
方法嗎,因為您也沒有實例調用此方法?
您有一個枚舉定義:
public enum MyEnum {
MY_SAMPLE_ENUM
}
還有一個類的方法帶有一個枚舉參數:
public class SampleClass {
public static void myMethod(MyEnum myEnumParam) {
// some logic here
}
}
通過反射調用SampleClass.myMethod(MyEnum.MY_SAMPLE_ENUM)
:
Class clazzMyEnum= Class.forName("mypkg.MyEnum", true, myClassLoader);
Enum enum_MY_SAMPLE_ENUM = Enum.valueOf(clazzMyEnum, "MY_SAMPLE_ENUM");
Class clazzSampleClass = Class.forName("mypkg.SampleClass", true, myClassLoader);
Method methodMyMethod = clazzSampleClass.getMethod("myMethod", clazzMyEnum);
methodMyMethod.invoke(null, enum_MY_SAMPLE_ENUM);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.