在TestUtil.java
类中:
public static <E extends Enum<E>> E mapToEnum(Enum<E> mappingEnum, String data) {
return mappingEnum.valueOf(E, data); // Not working, needs Class of Enum and String value
}
枚举:
public enum TestEnum {
TEST1("A"),
TEST2("B");
private String value;
private TestEnum(String value) {
this.value = value;
}
}
它应该如何工作(例如在main方法中):
TestEnum x = TestUtil.mapToEnum(TestEnum.class, "TEST1"); // TEST1 is the name of the first enum instance
问题是,我无法弄清楚需要将什么传递到mapToEnum
方法中,以便可以从该枚举中获取valueOf
。
答案 0 :(得分:3)
如果您提供的代码可以接受:
public static <E extends Enum<E>> E mapToEnum(Enum<E> mappingEnum, String data) {
return mappingEnum.valueOf(E, data); // Not working, needs Class of Enum and String value
}
然后您要做的就是修复它。
这是我测试过的代码:
static <T extends Enum<T>> T mapToEnum(Class<T> mappingEnum, String data) {
return Enum.valueOf(mappingEnum, data);
}
用法:
@Test
public void test() {
TestEnum myEnum = mapToEnum(TestEnum.class, "TEST1");
System.out.println(myEnum.value); //prints "A"
}
答案 1 :(得分:0)
这是迭代枚举类值并与方法中传递的参数匹配的方法,请检查下面提到的代码。
enum TestEnum {
TEST1("test1"),
TEST2("test2");
private String value;
private TestEnum(String value) {
this.value = value;
}
public String getName() {
return value;
}
public static TestEnum mapToEnum(String data) {
for (TestEnum userType : TestEnum.values()) {
if (userType.getName().equals(data)) {
return userType;
}
}
return null;
}
}
答案 2 :(得分:0)
强烈建议将Apache commons-lang库用于样板功能...
TestEnum x = EnumUtils.getEnum(TestEnum.class, "TEST1");
...正是@Fenio演示的代码,但是使用null
处理null
或错误输入,而不抛出异常。
如果您对此一无所知,请查看lang3库的其余内容。我认为这是事实上的标准,可避免数百万开发人员重新编写小型管道实用程序。