sencillo proyectos programacion practicar para operador objetos lista genericos generica explicado ejemplos diamond bien java generics compiler-errors java-7

proyectos - programacion generica java



Influencia del operador ternario de Java en la inferencia de tipos genéricos (2)

public List<String> foo1() { List<String> retval = bar(); if (retval == null) return Collections.emptyList(); else return retval; } public List<String> foo2() { List<String> retval = bar(); return retval == null ? Collections.emptyList() : retval; }

¿Por qué foo1() compila bien mientras que foo2() tiene un error? (para ser más precisos, "No coincide el tipo: no se puede convertir desde la Lista <captura # 1-de? extiende el Objeto> a la Lista <String>" )

Pensé que ambas funciones se compilarían con el mismo emptyList() de emptyList() , por lo que un compilador inteligente debería inferir el tipo correcto para emptyList() ...



Esto está relacionado con la Inferencia de tipos de un método genérico .

En caso de código antes ver. 8. Se debe declarar el tipo de resultado para este caso.

return retval == null ? Collections.<String>emptyList() : retval;

Desde ver. La noción de qué es un tipo de objetivo se ha expandido para incluir argumentos de método. Entonces esto ya no es requerido.