我们的问题是这样的: 我们希望将不同的枚举类型传递给方法,并在类型上调用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);
}
是否有人知道应该如何实现这样的事情或者是否可以实现?
谢谢
答案 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
;