Considere este ejemplo:¿Por qué los tipos crudos en un lugar causan callites genéricos en otro lugar para ser tratados como crudos?
import java.util.*;
class Foo<T> {
public int baz(List<String> stringlist) { return 1; }
public int baz(ArrayList<Object> objectlist) { return 2; }
public static void main(String[] args) {
Foo<String> foo = new Foo<String>(); // (A)
//Foo foo = new Foo(); // (B)
System.out.println(foo.baz(new ArrayList<String>()));
}
}
¿Por qué se imprime en 1
(A)
, pero 2
con (B)
?
Sé cómo funciona la resolución de métodos, así que no hay necesidad de explicarme eso.
Quiero saber la motivación más profunda detrás de esta "función". ¿Por qué no hay una advertencia de borrado al respecto? (Solo hay uno sobre Foo foo = new Foo()
.)
¿Por qué la resolución del método utiliza semántica borrada aunque se proporciona el tipo genérico?
Sure it is not. El tipo de elemento 'ArrayList' no está definido como covariante. – soc