簡體   English   中英

將反射的枚舉傳遞給method.invoke java

[英]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傳遞給Fieldget方法,如下所示:

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

另外myMethodstatic方法嗎,因為您也沒有實例調用此方法?

您有一個枚舉定義:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM