автоматическое связывание (вывод типов) обобщенных типов компилятором

следующий код имеет ошибку компиляции в строке 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);
}

Сообщение об ошибке:Несоответствие типов: невозможно преобразовать объект в T

Я знаю, что могу решить проблему, используя приведение или ручное связывание, мои вопросы:это так сложно для компилятора сделать автоматическое связывание, есть ли случай, что он потерпит неудачу?

Редактировать: добавлено сообщение об ошибке.

Редактировать: добавлен еще один пример, как ошибка не произошла.

Редактировать: убрал второй пример, потому что он сбивал с толку, сделал вопрос более понятным.

Ответы на вопрос(5)

Ваш ответ на вопрос