Java 如何正确重载泛型集合

Java 如何正确重载泛型集合,java,generics,Java,Generics,更新:请看评论,这与maven环境有关 我搜索了一个类似的问题,但没有找到我想要的东西。我想编写一个字符串实用程序类,将集合组装成字符串,插入分隔符 注意:请不要告诉我如何组合逗号分隔的字符串!我知道很多方法。我想了解泛型方法机制 例如: List<String> strings = new ArrayList<>(); strings.add("A"); strings.add("B"); strings.add("C"); StringUtils.assemble(s

更新:请看评论,这与maven环境有关

我搜索了一个类似的问题,但没有找到我想要的东西。我想编写一个字符串实用程序类,将集合组装成字符串,插入分隔符

注意:请不要告诉我如何组合逗号分隔的字符串!我知道很多方法。我想了解泛型方法机制

例如:

List<String> strings = new ArrayList<>();
strings.add("A");
strings.add("B");
strings.add("C");
StringUtils.assemble(strings, ","); ==> "A,B,C"
List strings=new ArrayList();
字符串。添加(“A”);
字符串。添加(“B”);
字符串。添加(“C”);
StringUtils.assembly(字符串,“”,“”;==>“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();
}
公共静态字符串汇编(列表对象、字符串分隔符){
StringBuilder sb=新的StringBuilder();
对于(int i=0;i
不幸的是,对该方法的调用会产生编译错误:

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
C1类{
公共字符串toString(){…}
}
C2类{
私人名单;
void foo(){
StringUtils.assembly(列表,“,”);
}
}
[错误][…]/C2.java:[557,38]找不到符号
符号:方法汇编(java.util.List、java.lang.String)
位置:类别[…]StringUtils

是否可以创建一个通用方法来完成我正在尝试的工作?

检查您在
StringUtils\assemble
方法中使用的
java.util.List
。您的代码看起来应该可以工作。检查导入。你导入了正确的StringUtils类吗?嗯,你们都是对的。。。将所有这些提取到一个独立的项目中效果很好。嗯,很奇怪。我将项目文件夹复制到一个新位置,一切都很好。回到原来的位置,干净整洁,一切都很好。我真的不知道发生了什么。本地maven回购是否会被依赖项目的糟糕版本所困扰?不管怎样,这个问题应该被关闭或忽略。或者留给未来的旅行者作为警告。