Случается, когда в неожиданном месте есть T_XXX
токен , несбалансированные (лишние) круглые скобки, использование короткого тега без его активации в php.ini и т. д.
Вопросы, относящиеся:
Для получения дополнительной помощи см .:
Проблема, с которой Вы встречаетесь, то, что даже при том, что метод emptyList()
возвраты List<T>
, Вы не предоставили ему тип, таким образом, это принимает значение по умолчанию к возврату List<Object>
. Можно предоставить параметр типа и иметь код, ведут себя как ожидалось, как это:
public Person(String name) {
this(name,Collections.<String>emptyList());
}
Теперь, когда Вы делаете уроки, компилятор может выяснить универсальные параметры типа для Вас. Это назвало вывод типа. Например, если Вы сделали это:
public Person(String name) {
List<String> emptyList = Collections.emptyList();
this(name, emptyList);
}
тогда эти emptyList()
вызов правильно возвратился бы List<String>
.
Вы хотите использовать:
Collections.<String>emptyList();
при рассмотрении источника для того, что emptyList, Вы видите, что это на самом деле просто делает
return (List<T>)EMPTY_LIST;
emptyList метод имеет эту подпись:
public static final <T> List<T> emptyList()
, Что <T>
, прежде чем список слов означает, что выводит значение универсального параметра T от типа переменной, которой присвоен результат. Так в этом случае:
List<String> stringList = Collections.emptyList();
на возвращаемое значение тогда ссылается явно переменная типа List<String>
, таким образом, компилятор может понять его. В этом случае:
setList(Collections.emptyList());
нет никакой явной возвращаемой переменной для компилятора для использования для выяснения универсального типа, таким образом, это принимает значение по умолчанию к Object
.