目标是实现通用的Enum翻译器。 我知道 Enum1 和 Enum2 具有相同的值并且顺序相同。
目标是实现这样的事情:(这有效)
private static Enum1 translateEnum(Enum2 originalEnum) {
return Enum1.values()[originalEnum.ordinal()];
}
但我有几个枚举,所以我想制作一个通用方法:(这不起作用)
private static < T extends Enum<T>,G extends Enum<G>> T translateEnum(G originalEnum) {
return T.values()[originalEnum.ordinal()];
}
我的问题是,在 T.values(),编译器告诉我:
对于类型T
,方法值()未定义
你们是否知道如何解决这个问题,或者你对我的问题有任何其他想法?
答案 0 :(得分:3)
执行此操作的常用方法是将目标class object(或目标类的对象)作为参数传递给函数,然后使用类对象中的方法来执行棘手的部分。对于枚举类,类对象具有a method which returns the equivalent of Enum.values()。您可以使用它来获取目标类的枚举值:
public class Scratch {
enum lower { a, b, c };
enum upper { A, B, C };
static <T extends Enum<T>> T translate(Enum<?> aFrom, Class<T> aTo) {
return aTo.getEnumConstants()[aFrom.ordinal()];
}
public static void main(String[] args) {
for (lower ll : lower.values()) {
upper uu = translate(ll, upper.class);
System.out.printf("Upper of '%s' is '%s'\n", ll, uu);
}
for (upper uu : upper.values()) {
lower ll = translate(uu, lower.class);
System.out.printf("Lower of '%s' is '%s'\n", uu, ll);
}
}
}
运行它会产生以下输出:
Upper of 'a' is 'A'
Upper of 'b' is 'B'
Upper of 'c' is 'C'
Lower of 'A' is 'a'
Lower of 'B' is 'b'
Lower of 'C' is 'c'