Зачем нужен <T> перед void в описании метода? [дубликат]

311
12 января 2017, 04:40

На данный вопрос уже ответили:

  • Что значит <T> перед возвращаемым типом в методе 2 ответа

Есть метод:

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)

Answer 1

Здесь <T> относится не к результату метода (void), а ко входным параметрам (List<T> list, T val). Просто так принято, что переменная типа вводится после модификаторов и перед возвращаемым типом. Это является особенностью обобщенного метода.

Answer 2

Согласно спецификации 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
READ ALSO
Как определить расширение файла?

Как определить расширение файла?

Я пытаюсь сделать свой файловый менеджер и столкнулся с такой проблемойКогда я пытаюсь выбрать файл, а не директорию, то моя программа слетает

311
Динамический массив (Java)

Динамический массив (Java)

Задача : Массив состоит из натуральных чисел

511
Почему не закрашивается фон JMenu? Java

Почему не закрашивается фон JMenu? Java

Мне необходимо закрасить фон выделенного пункта JMenuПробовал напрямую обратится к объекту и использовать setBackground()- тщетно

288
Замена Dll в Linux + java

Замена Dll в Linux + java

Всем приветСкажите пожалуйста, какую замену можно придумать оконному DLL на Linux + java

302