用于打印列表的重载方法

Goa*_*cat 3 java overloading function

我有两种类型的列表:

ArrayList<String> sList;
ArrayList<Resource rList;
Run Code Online (Sandbox Code Playgroud)

我可以.getName()在资源对象上调用一个方法.

我想通过调用printList(list)这样的方法打印出这些列表中的任何一个:

printList(sList);
printList(rList);
Run Code Online (Sandbox Code Playgroud)

他们的代码看起来像这样:

private static void printList(ArrayList<String> list){
    for(String s : list){
        System.out.println(s + ", ");
   }
}

private static void printList(ArrayList<Resource> list){
    for(Resource r : list){
        System.out.println(r.getName() + ", ");
   }
}
Run Code Online (Sandbox Code Playgroud)

我没有任何特别的使用理由private static,它恰好是因为eclipse建议它.

但是,代码不起作用.Eclipse给出了以下错误:

"方法printList(ArrayList)具有与GUI类型中的另一种方法相同的擦除printList(ArrayList)"

GUI是我的班级.怎么了?

编辑:是否有任何替代或解决方案来获得我想要的功能?

Rei*_*eus 6

由于类型擦除,两种方法都具有相同的签名,即编译器同时看到它们

private static void printList(ArrayList list)
Run Code Online (Sandbox Code Playgroud)

然后使彼此无法区分并导致编译错误.如果希望编译代码,则需要更改签名,例如

private static void printStringList(ArrayList<String> list)
private static void printResourceList(ArrayList<Resource> list)
Run Code Online (Sandbox Code Playgroud)

或者如果toString已经在所有List类型中被覆盖,则可以使用泛型格式(如.)来使用多态

private static <T> void printList(List<T> list) {
    for (T t: list) {
        System.out.println(t);
    }
}
Run Code Online (Sandbox Code Playgroud)