java generi c подпись метода - PullRequest
2 голосов
/ 28 мая 2020

Я немного запутался в синтаксисе общих c методов. После прочтения этого сообщения я понял, что метод generi c должен быть объявлен следующим образом:

public static <E> void printArray( E[] inputArray )

, где <E> является заполнителем, который сообщает, что E является generi c введите

Так почему же я нахожу в javado c такие вещи:

Stream<T> filter(Predicate<? super T> predicate)

Нет заполнителя? Я ожидал

<T> Stream<T> filter(Predicate<? super T> predicate)

И почему

<R> Stream<R> map(Function<? super T,? extends R> mapper)

На этот раз есть заполнитель, но только для R, а не для T. Почему?

1 Ответ

3 голосов
/ 28 мая 2020

Эти методы являются методами экземпляра, определенными в интерфейсе Stream, который определяет параметр типа для type :

public interface Stream<T> {
  Stream<T> filter(Predicate<? super T>)
}

... поэтому параметр типа определяется на интерфейс, а не метод.

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

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