Function.class 中下界通配符的用途是什么?
What is the purpose of lower bounded wildcard in Function.class?
在 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
"V" 是下限这一事实是否有任何合理的情况?
? super
允许返回的 Function
的输入类型 (V
) 与参数输入类型不同。
例如,这会使用 ? super
版本进行编译,而不是备用版本。
Function<Object, String> before = Object::toString;
Function<String, Integer> after = Integer::parseInt;
Function<Integer, Integer> composed = after.compose(before);
在 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
"V" 是下限这一事实是否有任何合理的情况?
? super
允许返回的 Function
的输入类型 (V
) 与参数输入类型不同。
例如,这会使用 ? super
版本进行编译,而不是备用版本。
Function<Object, String> before = Object::toString;
Function<String, Integer> after = Integer::parseInt;
Function<Integer, Integer> composed = after.compose(before);