2015-04-11 3 views
1

Я хотел бы в общем преобразовать String в csv form в List enum. Однако java не будет распознавать общий тип перечисления.Java Generic Csv String to Enum List

Я использую Guava и не может использовать Java 8.

Любая идея?

public static <E extends Enum<E>> List<E> getEnumList(String csvLine) { 
    List<String> csvList = Arrays.asList(csvLine.split(",")); 

    Function<String, E> enumList = new Function<String, E>() { 
     @Override 
     public E apply(String csvStr) { 
      return Enum.valueOf(E.class, csvStr); 
     } 
    }; 

    return Lists.transform(csvList, enumList); 
} 

ответ

3

Вы должны пройти Class<E>, потому что E будут удалены (и заменены что-то конкретное время выполнения).

Что-то вроде:

public static <E extends Enum<E>> List<E> getEnumList(String csvLine, Class<E> clazz) { 
    List<String> csvList = Arrays.asList(csvLine.split(",")); 

    Function<String, E> enumList = new Function<String, E>() { 
     @Override 
     public E apply(String csvStr) { 
      return Enum.valueOf(clazz, ""); 
     } 
    }; 

    return Lists.transform(csvList, enumList); 
} 

Как примечание стороны, я думаю, вы должны заменить пустую строку "" с csvStr, в противном случае параметр csvStr не имеет никакого смысла.

+0

Действительно, я забыл изменить «» на strCsv. –

+0

В любом случае, это работает! Спасибо за помощь! –