Цель использования "? Super T" в Java8 Consumer andThen - PullRequest
0 голосов
/ 13 января 2019

Я смотрел на функциональный интерфейс Java8 Потребитель . Я вижу метод по умолчанию и затем . Я понял, что этот метод используется для объединения потребителей. Ниже приведен код метода andThen:

default Consumer<T> andThen(Consumer<? super T> after) {
    Objects.requireNonNull(after);
    return (T t) -> { accept(t); after.accept(t); };
}

Вопрос: Почему в аргументе Consumer метода andThen разрешены только тип & SuperType элемента (? Super T). Я хочу понять цель использования здесь.

Я бы помог мне улучшить мое понимание обобщения.

1 Ответ

0 голосов
/ 13 января 2019

Допустим, у вас есть Consumer<Dog> и Consumer<Animal>. Конечно, вы можете передать Dog в любой из этих accept методов, так как Dog является Animal.

Однако в Java нет отношений наследования между Consumer<Dog> и Consumer<Animal> по причинам, которые обсуждались на других вопросах на этом сайте. Таким образом, чтобы позволить нам связать любой другой Consumer, который будет принимать Dog, мы должны объявить его как Consumer<? super Dog>.

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