следующий код имеет ошибки компиляции в строке 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
Я знаю, что могу исправить эту проблему, используя литье или ручную привязку, мои вопросы таковы: сложно компилятору сделать автоматическую привязку, есть ли случай, когда он не сработает?
Редактировать: добавлено сообщение об ошибке.
Редактировать: добавлен еще один пример того, как ошибка не произошла.
Редактировать: удалил второй пример, поскольку он был запутанным, поставил вопрос более ясным.
Когда вы задаете вопрос, вам необходимо убедиться, что вы также указали сообщение об ошибке в вопросе. –
Это поможет, если вы сообщите нам точное сообщение об ошибке. – thecoop
нашел аналогичный вопрос с частичным объяснением: http://stackoverflow.com/questions/2055352/why-implicit-type-inference-only-works-in-an-assignment – oshai