Стирание типа дженериков Java параметров метода
Я получил это из разговора головоломки Google I / O, данного Джошуа Блохом. Вот код
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));
}
этот основной метод вызывает исключение, потому чтоnew Glommer
это необработанный тип и, следовательно, все дженерики вGlommer
стирается, так что в конечном итоге звонитint glom(List<Integer> ints)
скорее, чемString glom(Collection<?> obj)
.
Мой вопрос, даже если я позвонилglom()
какnew Glommer<Integer>().glom(strings)
не должно это назватьint glom(List<Integer> ints)
метод, поскольку из-за стирания типа этот метод эффективноint glom(List ints)
а такжеstrings
имеет типList
неCollection
?