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是我的班级.怎么了?
编辑:是否有任何替代或解决方案来获得我想要的功能?
由于类型擦除,两种方法都具有相同的签名,即编译器同时看到它们
如
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)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           65 次  |  
        
|   最近记录:  |