Optional.or() doesn't use a wildcard in its signature

Vitaly Davidovich vitalyd at gmail.com
Sun Nov 1 14:41:15 UTC 2015


One could argue that this is perfectly sound to do given Optional is
readonly, we just can't express this variance cleanly in java (i.e. without
upcast).

sent from my phone
On Nov 1, 2015 7:31 AM, "Stefan Zobel" <spliterator at gmail.com> wrote:

> 2015-11-01 1:12 GMT+01:00 Michael Nascimento <misterm at gmail.com>:
> > Hi Vitaly,
> >
> > Exactly, I was just trying to point out the method signature seems broken
> > anyway.
> >
> > Regards,
> > Michael
>
>
> Hi Michael,
>
> I don't think the signature is broken.
>
> An Optional<StringBuilder> is not a subtype of Optional<CharSequence>.
> So even if the signature were
>
> public <R extends T> Optional<T> or(Supplier<Optional<R>> supplier)
>
> we'd have to upcast the result of supplier.get() to Optional<T>
> which appears to be wrong from a type perspective.
>
>
> Regards,
> Stefan
>
>
>
> >
> > On 31 Oct 2015 11:59, "Vitaly Davidovich" <vitalyd at gmail.com> wrote:
> >>
> >> This would require Supplier<Optional<? extends T>>, not Supplier<?
> extends
> >> Optional<T>>.
> >>
> >> sent from my phone
> >>
> >> On Oct 31, 2015 2:49 PM, "Michael Nascimento" <misterm at gmail.com>
> wrote:
> >>>
> >>> If this instance is an Optional<CharSequence> ,  passing an
> >>> Optional<StringBuilder> will fail to compile.
> >>>
> >>> Regards,
> >>> Michael
> >>> On 31 Oct 2015 11:21, "Stefan Zobel" <spliterator at gmail.com> wrote:
> >>>
> >>> > 2015-10-31 19:11 GMT+01:00 Remi Forax <forax at univ-mlv.fr>:
> >>> >
> >>> > > Hi all, hi Paul,
> >>> > >
> >>> > > I've just seen that Optional.or is declared as
> >>> > >   public Optional<T> or(Supplier<Optional<T>> supplier) {
> >>> > > instead of
> >>> > >   public Optional<T> or(Supplier<? extends Optional<T>> supplier) {
> >>> > >
> >>> > > regards,
> >>> > > Rémi
> >>> > >
> >>> >
> >>> >
> >>> > I don't get it. Optional is final anyway. Can you explain?
> >>> >
> >>> > Thanks,
> >>> > Stefan
>



More information about the core-libs-dev mailing list