ligação automática (inferência de tipo) de tipos genéricos pelo compilador
o código a seguir tem erro de compilação na linha 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);
}
A mensagem de erro é:Incompatibilidade de tipo: não é possível converter de Objeto em T
Sei que posso corrigir o problema usando a conversão ou encadernação manual, minhas perguntas são:é tão difícil para o compilador fazer a ligação automática; existe um caso em que ele falhará?
Editar: adicionada a mensagem de erro.
Editar: adicionado outro exemplo de como o erro não ocorreu.
Edit: removeu o segundo exemplo por ser confuso, deixou a pergunta mais clara.