Function.class中下限通配符的目的是什么?

时间:2016-07-16 03:13:40

标签: java java-8 functional-interface

在Java8的Function.class中,我们有:

default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
    Objects.requireNonNull(before);
    return (V v) -> apply(before.apply(v));
}

撰写接受:

Function<? super V, ? extends T> before

而不是:

Function<V, ? extends T> before

是否有任何合理的情况,其中&#34; V&#34;是有限的事情?

1 个答案:

答案 0 :(得分:5)

? super允许返回的Function输入类型(V)与参数输入类型不同。

例如,这会使用? super版本进行编译,但不会使用备用版本进行编译。

Function<Object, String> before = Object::toString;
Function<String, Integer> after = Integer::parseInt;
Function<Integer, Integer> composed = after.compose(before);