“第一次很长时间”正如他们在电台谈话节目中所说的那样......
我正在尝试将分隔的属性解析为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);
}
}
答案 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));
}