gpt4 book ai didi

所有枚举的java通用方法!枚举类型问题

转载 作者:行者123 更新时间:2023-12-02 08:40:38 24 4
gpt4 key购买 nike

我想为我的所有枚举实现这个通用方法,但我无法获取 enumType ??

public static <T extends Enum> T getValue(String value) throws ValidationException {
try {
Class<T> enumType = null; //i can't get it ????
return (T) T.valueOf(enumType, value);
} catch (Exception e) {
throw new ValidationException(ERROR_CODE.ERR_INVALID_PARAM);
}
}

最佳答案

Java 的泛型系统使用一种称为“类型删除”的方法。这意味着参数类型,例如 T ,仅存在于源代码中,而不存在于实际编译的程序中。因此,无法知道 T 是什么类型。表示自 T 的整个概念起调用该方法的时间在运行时甚至不存在。

不幸的是,该方法获得 Class<T> 的唯一方法实例实际上是将其作为参数传递:

MyEnum e = getValue(MyEnum.class, "MY_VALUE");

一旦您拥有Class<T>例如,您可以调用getEnumConstants()方法来获取所有枚举值的数组。然后,您可以在其中搜索具有所需名称的值:

T[] constants = enumType.getEnumConstants();
for (T c : constants) {
if (c.name().equals(value)) {
return c;
}
}
throw new IllegalArgumentException("No such value: " + value);

关于所有枚举的java通用方法!枚举类型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61410093/

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