На данный вопрос уже ответили:
Есть метод:
public static <T> void fill(List<T> list, T val) {
for (int i = 0; i < list.size(); i++)
list.set(i, val);
}
Зачем этот <T> перед void стоит? Что он делает? Ничего же не возвращается - зачем оно тут? И главное как соотносится этот <T> void... с тем что в параметрах (List<T> list, T val)
Здесь <T> относится не к результату метода (void), а ко входным параметрам (List<T> list, T val). Просто так принято, что переменная типа вводится после модификаторов и перед возвращаемым типом. Это является особенностью обобщенного метода.
Согласно спецификации Java SE 8 Edition (8.4 Method Declarations) метод определяется следующим образом
MethodDeclaration:
{MethodModifier} MethodHeader MethodBody
MethodHeader:
Result MethodDeclarator [Throws]
TypeParameters {Annotation} Result MethodDeclarator [Throws
^^^^^^^^^^^^^^
То есть в вашем объявлении метода
public static <T> void fill(List<T> list, T val)
^^^
выделенная часть - это объявление параметров типов TypeParameters для обобщенных методов. То есть эта часть объявления обобщенного метода служит для объявления переменных типов, используемых в определении метода.
Объявление вашего метода можно подробнее расписать следующим образлм
public static <T> void fill(List<T> list, T val)
MethodModifier TypeParameters Result MethodDeclarator
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости