Передайте тип перечисления в качестве параметра - PullRequest
3 голосов
/ 23 сентября 2019

Я хочу создать метод, который:

  • Принимает тип перечисления и String в качестве аргументов
    • String - это имя одного конкретного экземпляра enum
  • Возвращает экземпляр enum, соответствующий этому имени.

Что я пробовал:

В классе 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;
    }
}

Как это должно работать (например, в основном методе):

TestEnum x = TestUtil.mapToEnum(TestEnum.class, "TEST1"); // TEST1 is the name of the first enum instance

проблема в том, что я не могу понять, что мне нужно передать в метод mapToEnum, чтобы я мог получить valueOf из этого Enum.

Ответы [ 2 ]

3 голосов
/ 23 сентября 2019

Если код, который вы указали, является приемлемым:

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"
}
0 голосов
/ 23 сентября 2019

Это то, как вы можете перебрать значение класса enum и сопоставить его с параметром, который вы передали в методе, пожалуйста, проверьте нижеприведенный код.

  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;
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...