如何将逗号分隔的String转换为Core Java中的T列表

时间:2010-04-30 13:18:10

标签: java

“第一次很长时间”正如他们在电台谈话节目中所说的那样......

我正在尝试将分隔的属性解析为List。很简单,但由于某种原因,我无法仅使用Core Java以通用方式来解决这个问题。通用,我的意思是要创建的List的类型可以是List<字符串>,列表<整数>,或列表<双>。我在下面的最新一次尝试给出了非字符串的运行时异常,因为我试图从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 个答案:

答案 0 :(得分:1)

你需要在你的函数中传递类,比如;

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

然后使用 clazz reflection,为其参数获取Constructor一个字符串,使用delim拆分propName,每个子字符串,使用前一个构造函数调用T的新实例。将这个新实例放入listToFill并返回此列表。

答案 1 :(得分:1)

由于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));
}