なぜオプションのかとflatMapメソッドのサプライヤーの型パラメータのワイルドカードはありますか?

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>>

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=37970&siteId=1