如何将多个枚举类型作为方法参数传递,然后在它们上调用常用方法?

时间:2012-03-13 16:26:19

标签: java enums

我们的问题是这样的: 我们希望将不同的枚举类型传递给方法,并在类型上调用values()方法。

public enum Testing {
    A, B, C, D
}

public enum Retesting {
    E, F, G, H
}

public static Object[] getValues(Enum e) {
    return e.values(); // ! Compilation Error
}

public static void main(String[] args) {
    Testing t = Testing.A;
    getValues(t);
}

是否有人知道应该如何实现这样的事情或者是否可以实现?

谢谢

3 个答案:

答案 0 :(得分:6)

尝试使用:

e.getClass().getEnumConstants()

答案 1 :(得分:0)

这是使用反射的解决方案。但我更喜欢@ korifey的回答。 :)

@SuppressWarnings("unchecked")
public static <T extends Enum<T>> T[] getValues(Class<T> e) throws IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
    return (T[]) e.getMethod("values").invoke(null);
}

public static void main(String[] args) throws IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
    System.out.println(Arrays.asList(getValues(Testing.class)));
}

答案 2 :(得分:0)

@korifey和@Matt McHenry都是对的(每人+1)。 我个人认为,在你的情况下,korifey的方式更可取。

我只想补充一点,您的方法签名可能是:

getValues(Enum e){ .... }

因为所有enum都是扩展类Enum;

的普通类