user7:
Optional.or
この方法は、Java 9で追加されましたこれは、メソッドのシグネチャであります
public Optional<T> or(Supplier<? extends Optional<? extends T>> supplier)
なぜのtypeパラメータであるSupplier
撮影は? extends Optional
ちょうどではなく、Optional
以来、Optional
ある最終クラス?
同じことが当てはまりあるOptional.flatMap
方法。これは、Java 8からの変更点です。
ジャワ8には、あったFunction<? super T, Optional<U>> mapper
それが変更されたのに対し、Function<? super T,? extends Optional<? extends U>>
ジャワ9。
user7:
私はスチュアート・マークス本人からこの背後にある理由を見つけました
http://mail.openjdk.java.net/pipermail/core-libs-dev/2016-October/044026.html
これは、入れ子になったジェネリック(に関係しているOptional
内にネストされますFunction
)。メールスレッドから
Function<..., Optional<StringBuilder>>
のサブタイプではありません
Function<..., Optional<? extends CharSequence>>
この問題を回避するために、我々はそうすることを、同様に外側のワイルドカードを追加する必要があります
Function<..., Optional<StringBuilder>>
のサブタイプであります
Function<..., ? extends Optional<? extends CharSequence>>