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");

当您使用原始类型时,您将收到未经检查的警告,但这将编译并运行。

使用反射,您需要传递一个实例来访问 a Field- 但是在静态方法的情况下,您可以按如下方式传递nullField's方法: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 回答