Supongamos que tengo un método tan simple como este para el procesamiento de dos listas:genéricos de Java: inferir tipos más de dos parámetros
public static <B> void foo(List<B> list1, List<B> list2) {
}
Y supongamos que quiero llamarlo así:
foo(ImmutableList.of(), ImmutableList.of(1));
Este won 'compilar, porque javac
no es lo suficientemente inteligente como para descubrir que estaba tratando de crear dos listas de enteros. En su lugar, tengo que escribir:
foo(ImmutableList.<Integer>of(), ImmutableList.of(1));
¿Cómo debo cambiar la declaración de foo
para permitir que la primera versión que funciona tan bien como el segundo?
Bastante seguro que no se puede hacer cambiando la declaración de 'foo()'. –
En realidad, no es una cuestión de 'javac' no ser lo suficientemente inteligente, es una pregunta genuina de lo que quiere decir con' ImmutableList.of() '. ¿Qué pasa si 'of()' devuelve no una lista vacía sino una lista llena de 5 objetos creados con constructores por defecto? Son solo las partes internas de 'of()' las que le dicen que ese no es el caso, y si eso es lo que pasó, 'foo' obtendría una lista de' Object's y una lista de 'Integer's. –