Löschen von Methodenparametern durch generische Java-Typen
Ich habe diesen aus einem Google I / O-Puzzler-Vortrag von Joshua Bloch erhalten. Hier ist der Code
public class Glommer<T> {
String glom(Collection<?> obj){
String result = "";
for(Object o : obj){
result += o;
}
return result;
}
int glom(List<Integer> ints){
int result = 0;
for(int i : ints){
result += i;
}
return result;
}
public static void main(String args[]){
List<String> strings = Arrays.asList("1", "2", "3");
System.out.println(new Glommer().glom(strings));
}
Diese Hauptmethode löst eine Ausnahme aus, weilnew Glommer
ist ein roher Typ und daher alle Generika inGlommer
gelöscht wird, so dass es aufruftint glom(List<Integer> ints)
eher, alsString glom(Collection<?> obj)
.
Meine Frage ist, auch wenn ich angerufen habeglom()
wienew Glommer<Integer>().glom(strings)
sollte es das nicht nennenint glom(List<Integer> ints)
Verfahren, da aufgrund der Typlöschung dieses Verfahren effektiv istint glom(List ints)
undstrings
ist vom TypList
nichtCollection
?