Optional -> OptionalResult

Zhong Yu zhong.j.yu at gmail.com
Tue Jun 4 09:36:04 PDT 2013

I like Result<T>. I think it should be able to carry an Exception too.
API authors who don't care to give an exception use the default

    interface Result<T>

        // return a failure with a NoResultException
        public static Result<T> none(){ return NONE; }

On Tue, Jun 4, 2013 at 10:13 AM, Stephen Colebourne
<scolebourne at joda.org> wrote:
> Optional is, and will continue to be, a key debating point for those
> arguing for more FP. The pressure to make it more powerful will
> continue, especially given similar named features in other languages.
> Meanwhile I continue to fear Map<Optional<List<Optional<String>>> and
> the like. The generics type system in Java simply isn't good enough to
> be doing anything like that, even if it were remotely desirable.
> Where the class is useful is in the return position. As Brian says "I
> think where we've tried to land is: do things that encourage people to
> use Optional only in return position".
> However, the one thing that hasn't been done is to name it as such.
> Simply rename "Optional" to "OptionalResult", or just "Result" and
> many of the issues go away. Those from an FP background will clearly
> see it as something different (if related) and continue to be
> disappointed (Java isn't going to satisfy them no matter what). More
> importantly, Java developers will only use the class in the return
> type position, simply because of its name.
> Of course it doesn't prevent Map<Result<List<Result<String>>>, but it
> makes it much less likely just because the name no longer makes sense.
> If it is used in that way, its probably because it really is a
> collection of earlier results.
> Finally, I'd note that if named Result/OptionalResult, I don't overly
> mind which set of methods are on it or that it is a box. So long as
> there is the ability to query it using a simple if statement.
> Stephen
> On 24 May 2013 21:15, Brian Goetz <brian.goetz at oracle.com> wrote:
>> Optional has obvious upsides and downsides.  Some of the downsides are:
>>  - It's a box.  Boxing can be heavy.
>>  - The more general-purpose value-wrapper classes you have, the more some
>> people fear an explosion of unreadable types like
>> Map<Optional<List<String>>, List<Optional<Map<String,
>> List<Optional<String>>> in API signatures.
>> I think where we've tried to land is: do things that encourage people to use
>> Optional only in return position.  These methods make it more useful in
>> return position while not increasing the temptation to use it elsewhere any
>> more than we already have.  Hence "mostly harmless".
>> On 5/24/2013 4:10 PM, Tim Peierls wrote:
>>> On Fri, May 24, 2013 at 3:20 PM, Brian Goetz <brian.goetz at oracle.com
>>> <mailto:brian.goetz at oracle.com>> wrote:
>>>     Proposed spec for methods on Optional, which would have the obvious
>>>     counterparts in Optional{Int,Long,Double}.
>>>     These methods are known to be useful and seem mostly harmless now
>>>     that other things have settled.  (I don't think they greatly
>>>     increase the moral hazard of Optional in general, and they do make
>>>     it more expressive.)
>>> I'm in the curious (unique?) position of both desperately wanting
>>> Optional and desperately *not* wanting lots of additional methods like
>>> these. If the price of having Optional is the presence of these methods,
>>> I'll suck it up, but "mostly harmless" is not exactly a ringing
>>> endorsement.
>>> --tim

More information about the lambda-dev mailing list