Что это за ‹E› в сигнатуре метода?

Я читал об интерфейсе Set из здесь, который код потягивал ниже который является универсальным методом, который удаляет дубликаты из коллекции.

Мой вопрос в том, что это **< E>** помещено после статического перед Set<E> ?

Я имею в виду, будет ли этого Set<E> недостаточно? почему <E> был там дважды?

public static <E> Set<E> removeDups(Collection<E> c) {
    return new LinkedHashSet<E>(c);
}

person C graphics    schedule 16.03.2014    source источник
comment
В том же учебнике вы можете прочитать это: docs.oracle.com/ javase/tutorial/java/generics/index.html   -  person Genzer    schedule 16.03.2014
comment
Я пошел и прочитал это, но не понял актуальности!   -  person C graphics    schedule 16.03.2014
comment
Прочитайте Универсальные типы.   -  person Ravinder Reddy    schedule 16.03.2014
comment
Ты счастливчик. Когда я дошел до той же путаницы и спросил здесь, меня проголосовали против. И да, ответ находится в разделе «Универсальный метод» учебника по Java   -  person Bnrdo    schedule 19.03.2014


Ответы (3)


Здесь **<E>** — универсальный тип. Общий тип определяется как

Универсальный тип — это универсальный класс или интерфейс, который параметризован по типам. Следующий класс Box будет изменен для демонстрации концепции. ССЫЛКА

А по поводу вашего вопроса, связанного с <E>. Хорошее описание для него можно найти в том же учебнике.

Соглашения об именах параметров типа

По соглашению имена параметров типа представляют собой одну заглавную букву. Это резко контрастирует с соглашениями об именах переменных, о которых вы уже знаете, и на то есть веская причина: без этого соглашения было бы трудно определить разницу между переменной типа и обычным именем класса или интерфейса.

Наиболее часто используемые имена параметров типа:

 E - Element (used extensively by the Java Collections Framework)
    K - Key
    N - Number
    T - Type
    V - Value
    S,U,V etc. - 2nd, 3rd, 4th types

Вы увидите, что эти имена используются в Java SE API и в остальной части этого урока.

person Jabir    schedule 16.03.2014

Это означает, что этот метод объявляет общий тип параметра, который класс не определяет; в этом случае вы ДОЛЖНЫ объявить тип параметра перед типом возвращаемого значения (даже если этот «тип возвращаемого значения» равен void).


Подумайте об этом таким образом. Удалите начальный <E>. Ваша декларация тогда станет:

public static Set<E> removeDups(Collection<E> c)

Что здесь E? Если это не общий тип параметра, определенный самим классом, он может быть только существующим классом.

Отсюда такой синтаксис. Он позволяет определить общий параметр для использования в сигнатуре метода.

person fge    schedule 16.03.2014

Это просто общий тип, используемый в методе. Статические методы, использующие универсальные типы, должны указывать этот тип перед возвращаемым типом.

person jhn    schedule 16.03.2014