Java документы показывает сигнатуру функции с двумя отдельными типами возвращаемых универсальных типов? - PullRequest
1 голос
/ 04 апреля 2019

В документах в классе Optional в Java 8 подпись map выглядит следующим образом:

public <U> Optional<U> map(Function<? super T,? extends U> mapper)

В документации указано, что map возвращает необязательный тип, на который map отображается. Кажется, это соответствует Optional<U> в подписи. Но есть то, что похоже на другой тип возвращаемого значения: <U>, стоящий перед Optional<U>. Что это значит?

Ответы [ 2 ]

3 голосов
/ 04 апреля 2019

Цитирование из Документы Oracle :

Универсальные методы - это методы, которые вводят свои собственные параметры типа. Это похоже на объявление универсального типа, но параметр типа область действия ограничена методом, в котором он объявлен. Статический и разрешены нестатические обобщенные методы, а также обобщенный класс Конструкторы.

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

Как объяснено в приведенной выше цитате, U - это параметр типа, специфичный для map метода класса Optional. Поэтому сначала его нужно определить, чтобы его можно было использовать в методе. И поскольку этот новый тип может использоваться в возвращаемом типе, поэтому мы определяем его до того, как он будет использован, поскольку <U> находится перед Optional<U> в сигнатуре метода map.

3 голосов
/ 04 апреля 2019

Синтаксис <U> является объявлением универсального типа, возвращаемого универсальным методом Optional.map() .Это необходимо, потому что тип U создается методом map() и не используется нигде в классе Optional типа T.

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