我正在尝试编写一个用定界符分割字符串,然后返回从分割段派生的泛型类型的值的列表的函数。
public static <T> List<T> splitToList(String toParse, String delimiter, Class<T> cls) {
String[] values = toParse.split(delimiter);
List<T> list = new ArrayList<>();
for(int i = 0; i < values.length; i++) {
list.add(cls.cast(values[i]));
}
return list;
}
我的代码不适用于cls = Integer.class
。我做错什么了吗?
您不能将Java String
泛型转换为任何类型的POJO。您需要定义如何将字符串“解析”为对象。如果需要通用列表,则需要通用解析方法。我建议以下内容:
public static <T> List<T> splitParseToList(String input, String delimiter, Function<String, T> parser) {
String[] segments = StringUtils.split(input, delimiter);
List<T> result = new ArrayList<>();
for (String segment : segments) {
String unparsed = StringUtils.strip(segment);
// This is the step you missed (The conversion from String to 'actual' object):
T value = parser.apply(unparsed);
result.add(value);
}
return result;
}
这允许您指定将字符串转换为其他内容的解析函数:
String test = "1, 2, 4, 8";
List<Integer> list = splitParseToList(test, ",", Integer::parseInt);
System.out.println(list);
我在这里使用了Apache的StringUtils
。它是开源的。
[请注意,此方法对'不良输入'不是很可靠。我会把这个留给您,以确保您可以根据需要处理输入。