I think the type you talking about here is Optional<? extends U> instead of ? extends Optional<U>.
IIRC, Optional<? extends U> is not a subtype of Optional<U>, just like any other Collection class. List<Child> is not a List<Parent>. Cheers, Henry On Jul 13, 2013, at 3:15 AM, Jed Wesley-Smith <j...@wesleysmith.io> wrote: > > The ? extends Optional is unnecessary in flatMap as Optional is final. > > interestingly enough, it actually is. > > try the following test: > > class OptionalTest { > class Parent {}; > > class Child extends Parent {}; > > @Test public void covariantReturn() { > Optional<Parent> some = some(new Parent()); > Function<Parent, Optional<Child>> f = new Function<Parent, > Optional<Child>>() { > @Override public Optional<Child> apply(Parent p) { > return some(new Child()); > } > }; > Optional<Parent> mapped = some.<Parent> flatMap(f); > assertThat(mapped.get(), notNullValue()); > } > } > > adapted from the fugue test suite: > > https://bitbucket.org/atlassian/fugue/src/96a65067fb7aaf1edae1bffa07167a5865cbebec/src/test/java/com/atlassian/fugue/OptionTest.java#cl-155 > > The point to remember is that Optional<Child> is a type and as such is > actually a subtype of Optional<Parent> – and therefore requires a covariant > return. > > cheers, > jed. > > > > > On 13 July 2013 04:15, Mike Duigou <mike.dui...@oracle.com> wrote: > The ? extends Optional is unnecessary in flatMap as Optional is final. > Otherwise this looks good. > > Mike > > On Jul 5 2013, at 14:37 , Henry Jen wrote: > > > Hi, > > > > Please review the webrev at > > > > http://cr.openjdk.java.net/~henryjen/ccc/8015317.0/webrev/ > > > > Which adds following method to Optional, > > > > public static <T> Optional<T> ofNullable(T value) {} > > public Optional<T> filter(Predicate<? super T> predicate) {} > > public<U> Optional<U> map(Function<? super T, ? extends U> mapper) {} > > public<U> Optional<U> flatMap(Function<? super T, ? extends Optional<U>> > > mapper) {} > > > > Also included is some cleanup on javadoc. > > > > Cheers, > > Henry > > >