传递枚举类型作为参数

时间:2019-09-23 10:35:09

标签: java enums

我想创建一个方法,

  • 采用枚举的类型字符串作为参数
    • 字符串是一个特定的枚举实例的名称
  • 返回适合该名称的枚举实例。

我尝试过的事情:

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

3 个答案:

答案 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库的其余内容。我认为这是事实上的标准,可避免数百万开发人员重新编写小型管道实用程序。