3

リフレクションを介してアクセスしている列挙型がある場合、その値を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));
4

2 に答える 2

5

あなたはおそらくするべきです:

Enum e = Enum.valueOf(enumClazz, "MyEnumValue");

raw型を使用しているため、チェックされていない警告が表示されますが、これはコンパイルされて実行されます。

リフレクションを使用すると、にアクセスするためにインスタンスを渡す必要がありますField-ただし、静的メソッドの場合は、次のようnullFieldのメソッドに渡すことができます。get

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

また、インスタンスなしでこれを呼び出してmyMethodいるstaticメソッドはありますか?

于 2009-08-14T15:32:37.793 に答える
0

列挙型の定義があります:

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);
于 2014-11-05T16:09:55.880 に答える