универсальный возвращаемый объект - PullRequest
7 голосов
/ 18 января 2012

Недавно я читал следующий фрагмент кода из учебника по оракулу, когда наткнулся на этот фрагмент кода.

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

Я не смог понять, почему возвращаемое значение является чем-то

            <E> Set<E> and not just Set<E> ?

Ответы [ 5 ]

7 голосов
/ 18 января 2012

Тип возврата, по сути, просто Set<E>.

Другой <E> предназначен для указания того, что это универсальный метод, и для указания, что E является параметром для универсального. Без этого <E> компилятор предположил бы, что E является существующим классом, и попытался бы найти его (создавая ошибку, если в области действия нет класса с именем E.

2 голосов
/ 18 января 2012

тип возврата Set<E>, а не <E> Set<E>.Первые <E> объявляют переменную универсального типа E, в то время как для других <E> s, прикрепленных к классам коллекций, используется это объявление.

2 голосов
/ 18 января 2012

Это - это просто Set, точнее, набор с элементами типа E. Дополнительные <E> перед возвращаемым типом - это объявление типа для этого метода, указывающее, что тип <E> должен использоваться только в области действия этого конкретного метода - не путать с параметром типа класса, как этот:

public class Example<E> {

В приведенном выше фрагменте параметр типа <E> виден для всех методов класса, тогда как объявление типа, подобное приведенному в вашем вопросе, видно только в этом методе.

0 голосов
/ 19 января 2012

Да, первое кажется немного странным.Один из способов думать о первом состоит в том, что он говорит (или напоминает вам), что компилятор вычислит E для себя , основываясь на типе передаваемого в Collection, и вы, пользователь, не 'не нужно явно указывать ему, что такое Е.

0 голосов
/ 18 января 2012

E может быть классом. Возвращая <E> Set<E>, вы заявляете, что E является параметром в общем.

Это статическая функция, поэтому не существует базового определения, что такое E.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...