Это определенный синтаксис начиная с Java 5. Вам нужен параметр типа (один или несколько) для определения обобщенного c. Параметр типа не должен называться T
, подойдет любой идентификатор Java. Обычно используется одна заглавная буква, и T
для типа - это то, что мы часто выбираем, если у нас нет конкретной причины c для какой-либо другой буквы.
Фактический параметр типа должен быть ссылкой тип. Значения по-прежнему всегда go в реальных параметрах в круглых скобках, а не в параметрах типа (в отличие, например, от C ++). Вы можете создать new ArrayList<Integer>(50)
, список Integer
объектов с начальной вместимостью 50 из них.
То, что фактический параметр типа должен быть ссылочным типом, означает, что вы можете иметь List<String>
, List<LocalDate>
или список типа интерфейса, который вы объявили сами, даже List<int[]>
. В Java версиях, которые я использовал (до Java 10), параметр типа не может быть типом примитива (например, int
), но это может быть тип массива (например, int[]
или String[][]
, хотя часто непрактично). Разрешенные типы примитивов могут появиться в будущем Java версии.
Ссылка: Аналогичный вопрос: Что означает (угловые скобки) в Java?