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 次 |
| 最近记录: |