如何正确地重载泛型集合

时间:2015-03-15 14:34:31

标签: java generics

更新:请看评论,这是一个与maven环境有关的红鲱鱼。

我搜索了一个类似的问题,但没有找到我追求的同样的事情。我想写一个字符串实用程序类,它将集合组装成一个字符串,插入一个分隔符。

注意:请不要给我组装以逗号分隔的字符串的方法!我知道很多方法可以做到这一点。我想了解泛型方法机制。

例如:

List<String> strings = new ArrayList<>();
strings.add("A");
strings.add("B");
strings.add("C");
StringUtils.assemble(strings, ","); ==> "A,B,C"

所以我写了一个通用方法:

public static <T> String assemble(List<T> objs, String separator) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < objs.size(); i++) {
        if (i != 0) {
            sb.append(separator);
        }
        sb.append(objs.get(i).toString());
    }
    return sb.toString();
}

不幸的是,对该方法的调用会产生编译错误:

class C1 { 
    public String toString() { ... }
}
class C2 {
    private List<C1> list;
    void foo() {
        StringUtils.assemble(list, ",");
    }
}

[ERROR] [...]/C2.java:[557,38] cannot find symbol
  symbol:   method assemble(java.util.List<[...]C1>,java.lang.String)
  location: class [...]StringUtils

是否有可能创建一个通用方法来完成我尝试做的事情?

0 个答案:

没有答案