enlace automático (inferencia de tipos) de tipos genéricos por el compilador

el siguiente código tiene un error de compilación en la línea de t3:

public <E> List<E> getList()
{
    return new ArrayList<E>();
}
public <T> void first()
{
    List<T> ret = new ArrayList<T>();
    List<T> list = getList();
    T t1 = ret.get(0);
    T t2 = list.get(0);
    T t3 = getList().get(0);
}

El mensaje de error es:No coinciden los tipos: no se puede convertir de Objeto a T

Sé que puedo solucionar el problema usando la conversión manual o manual, mis preguntas son:¿Es tan difícil para el compilador hacer un enlace automático? ¿Hay algún caso de que falle?

Editar: se agregó el mensaje de error.

Editar: se agregó otro ejemplo de cómo no se produjo el error.

Editar: eliminó el segundo ejemplo porque era confuso, dejó la pregunta más clara.

Respuestas a la pregunta(5)

Su respuesta a la pregunta