gpt4 book ai didi

java - 在泛型上调用 Enum.values()

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:03:13 25 4
gpt4 key购买 nike

目标是实现通用枚举转换器。我知道 Enum1Enum2 具有相同的值和相同的顺序。

目标是实现这样的东西:(这可行)

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() 处,编译器告诉我:

The method values() is undefined for the type T

你们知道我如何解决这个问题吗?或者你们对我的问题有其他想法吗?

最佳答案

一个常见的方法是传递目标 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'

关于java - 在泛型上调用 Enum.values(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45310332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com