【发布时间】:2018-02-08 18:25:48
【问题描述】:
我对集合上下文中下限的使用或多或少很清楚(请参阅PECS question)。 Java 中的函数式接口并非如此。例如。为什么 Optional.map 方法具有下界的签名:
<U> Optional<U> map(Function<? super T, ? extends U> mapper);
这里使用super有什么好处,为什么下面的代码不能编译?
public static void main(String[] args) {
Function<? super BigDecimal, ? extends Number> mapper = dec -> dec
.divide(BigDecimal.TEN)
.doubleValue();
BigDecimal bigD = BigDecimal.ONE;
//works
Optional.of(bigD).map(mapper);
Number number = BigDecimal.ONE;
// the following does not compile,
// despite Number is super type of BigDecimal
Optional.of(number).map(mapper);
}
【问题讨论】:
标签: java generics java-8 optional bounded-wildcard