如何通过Java中的反射传递枚举参数

时间:2018-06-06 19:42:07

标签: java reflection

我试图通过反射将枚举常量作为参数传递给方法。这是一个简单的例子,演示了我的问题的一个非常简化的版本。 (假设我必须使用反射)

enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY
}

public class Main {

    public void print(Day d) {
        System.out.println(d);
    }

    public static void main(String[] args) throws Exception
    {
        Class<?> cl = Class.forName("Day");
        Field field = cl2.getDeclaredField("MONDAY");
        print(_what_to_pass_here?)
    }
}

我该怎么做?

谢谢,

2 个答案:

答案 0 :(得分:5)

您不需要直接访问该字段。使用Enum.valueOf()

Enum.valueOf(cl.asSubclass(Day.class), "MONDAY")

但很难理解为什么你不能直接使用Day.class。它可能有助于详细说明您的用例。

答案 1 :(得分:1)

尝试java.lang.reflect.Field.get(Object obj)

Day day = (Day) field.get(cl);
print(day);