java - Optional<> and return type narrowing -
in java < 8, returning "unsafe" objects (objects or null), able specialize return type in subclass:
class {} class b extends {} interface sup { a(); /* returns instance, or null */ } interface sub extends sup { b a(); }
in java 8, if want make api "safer", should return optional<a>
instead of "raw" a
:
interface sup { optional<a> a(); } interface sub extends sup { optional<b> a(); }
but doesn't compile! because optional<b>
not subclass of optional<a>
.
how i'm supposed resolve issue?
you use wildcards.
interface sup { optional<? extends a> a(); } interface sub extends sup { optional<? extends b> a(); }
i have made optional<b>
using optional<? extends b>
allows interface extend sub
, same thing.
personally, think bit of mess, , preferable return a
or b
, or null
necessary.
Comments
Post a Comment