Как преобразовать разделенную запятыми строку в список T в Core Java - PullRequest
2 голосов
/ 30 апреля 2010

"первый раз долго", как говорят по радио ток-шоу ...

Я пытаюсь разобрать свойство с разделителями в список. Достаточно просто, но по какой-то причине я не могу понять, как сделать это в общем виде, используя только Core Java. Под общим я подразумеваю тип создаваемого списка: List , List или List . Мой последний удар ниже дает исключения во время выполнения с не-Strings, потому что я пытаюсь привести из String к, например. Двухместный, который не допускается. Любая помощь приветствуется.

public static <T> void parsePropsToList(String propName, String delim, List<T> listToFill){
   //This is paired down for convenience - assume getSplitList correctly parses to List<String>
   List<String> stringList = PropsManager.getSplitList(propName, delim);
   for(String s : stringList){
       listToFill.add((T)s);
   }
}

Ответы [ 2 ]

1 голос
/ 30 апреля 2010

Поскольку Java выдает универсальную информацию о типе во время выполнения, вам необходимо передать что-то в ваш метод, что позволит вам преобразовать строку свойства в правильный тип.

Я думаю, что проще всего было бы добавить параметр Parser в ваш метод:

public interface Parser<T> {
  public T parse(String value);
}

static <T> void parsePropsToList(String propName, String delim, List<T> listToFill, Parser<T> parser) {
  String value;
  //extract value from property
  listToFill.add(parser.parse(value));
}
1 голос
/ 30 апреля 2010

Вам нужно передать класс в вашей функции, что-то вроде;

public static <T> void parsePropsToList(
  String propName,
  String delim,
  List<T> listToFill,
  Class<T> clazz)

затем, используя отражение из clazz , получите Конструктор , имеющий в качестве аргумента одну String , разделите ваше propName с помощью delim и для каждой подстроки вызовите новый экземпляр T, используя предыдущий конструктор. поместите этот новый экземпляр в listToFill и затем верните этот список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...