java泛型方法将`enum常量名称`转换回`enum常量`
如何将以下名为reverse
的方法重写为允许任何枚举类型的泛型方法
public class TestX {
enum Gender { male, female }
public static void main(String[] args) {
System.out.printf("%s\n", TestX.reverse("male").name());
System.out.printf("%s\n", TestX.reverse("female").name());
}
static Gender reverse(String name) {
for (Gender g: Gender.class.getEnumConstants())
if (g.name().equals(name))
return g;
return null;
}
}
我尝试了什么(但没有在T.class
编译):
<T extends Enum<?>> T reverse2(String name) {
for (T t: T.class.getEnumConstants())
if (t.name().equals(name)) return t;
return null;
}
# 1 楼答案
我相信以下措施会奏效:
# 2 楼答案
怎么样
如果要使其通用,则需要指定要从哪个枚举获取值。否则就无法找到正确的enym(除非您也将它放在
name
中的某个地方,比如full.package.name.of.YourEnum.VALUE
)你也可以考虑使用
但是这种方法不是在enum没有指定元素时返回
null
,而是抛出java.lang.IllegalArgumentException