Что означает <T>перед типом возврата метода? - PullRequest
1 голос
/ 31 января 2020

Следующий метод возвращает список, состоящий из T элементов типа:

public <T> List<T> getList() {
    return new ArrayList<T>();
}

В подписи у нас есть <T> List<T>. Значение List<T> имеет смысл, поскольку это тип возвращаемого значения . Зачем нужен предыдущий <T>, хотя?

Код не компилируется без <T> и List<T>. Отсутствие <T> дает

Не удается разрешить символ T


Я прочитал официальный учебник Oracle по generi c методам . Это объясняет, что это является частью синтаксиса:

Синтаксис для метода generi c включает в себя список параметров типа внутри угловых скобок, который отображается перед возвращаемым типом метода.

Но на самом деле это не объясняет, зачем он вообще нужен или как точно он влияет на метод.

1 Ответ

4 голосов
/ 01 февраля 2020

Первый <T> означает, что второй T является заполнителем для универсального c параметра, а не фактического имени класса, который вы собираетесь сохранить в этом списке.

Без этого первый <T> компилятор будет обрабатывать T как имя класса (например, Object, String, et c), пытаясь найти класс с именем T в том же пакете, где существует класс с этим методом, или в разделе импорта класса с этим методом. И если компилятор не может найти класс с именем T, он покажет ошибку компиляции.

...