我可以将字符串转换为具有通用类型的列表吗?

问题描述 投票:0回答:1

我正在尝试编写一个用定界符分割字符串,然后返回从分割段派生的泛型类型的值的列表的函数。

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 list generics casting
1个回答
2
投票

您不能将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。它是开源的。

[请注意,此方法对'不良输入'不是很可靠。我会把这个留给您,以确保您可以根据需要处理输入。

© www.soinside.com 2019 - 2024. All rights reserved.