Eliminação do tipo de genéricos Java dos parâmetros do método
Eu peguei esse de uma conversa de quebra-cabeças de E / S do google dada por Joshua Bloch. Aqui está o código
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));
}
este método principal lança uma exceção porquenew Glommer
é um tipo bruto e, portanto, todos os genéricos emGlommer
é apagado, então acaba chamandoint glom(List<Integer> ints)
ao invés deString glom(Collection<?> obj)
.
Minha pergunta é, mesmo se eu ligueiglom()
Comonew Glommer<Integer>().glom(strings)
não deveria chamar oint glom(List<Integer> ints)
método desde devido ao apagamento de tipo, este método é efetivamenteint glom(List ints)
estrings
é do tipoList
nãoCollection
?