Loose ends: Optional

Remi Forax forax at univ-mlv.fr
Mon Jun 3 03:05:04 PDT 2013


On 06/03/2013 08:11 AM, Joe Bowbeer wrote:
> I'd like to see a compare-and-contrast between what is proposed for 
> Java8 and Guava's Optional and Scala's Option.
>
> Is the criticism that Brian is fielding now a replay of prior 
> criticism of Guava's Optional?
>
> http://benhutchison.wordpress.com/2012/06/05/a-rant-on-jdroids-and-wilful-ignorance/
> http://kerflyn.wordpress.com/2011/12/05/from-optional-to-monad-with-guava/
>
> How have Guava's user been dealing with its intentionally more limited 
> approach?

There are also some comments in the comment section of this wiki page:
https://code.google.com/p/guava-libraries/wiki/UsingAndAvoidingNullExplained

The number one criticism seems to be the lack of a method bind like in 
Haskell,
but because Java is not Haskell, the exact operation needed is neither a 
map nor a flatMap,
it's a composition of flatMap and Optional.ofNullable().
So the issue is more how to deal with the return value of a method that 
can be null but that doesn't return an Optional.

I still think and this is the conclusion of one of the blog cited above 
that the elvis syntax (?.)
is the best way to deal with this issue.
I don't see how to solve this issue without introducing 
Optional.ofNullable(), BTW.

> Have the new methods added in more recent versions helped?
>
> Optional<V> transform(Function<T,V>)
> Iterable<T> presentInstances(Iterable<Optional<T>)
> Set<T> asSet()
>
> http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Optional.html

asSet() is interesting because the users ask to see Optional as a 
collection explicitly.
presentInstances is an admission of weakness, people have already 
created an Iterable of Optional
and the iterable needs to be filtered in a post processing phase.

>
> Joe

Rémi

>
>
> On Sun, Jun 2, 2013 at 6:11 PM, Sam Pullara <spullara at gmail.com 
> <mailto:spullara at gmail.com>> wrote:
>
>     My opinion remains the same, we should have these methods and probably
>     a few more.
>
>     Sam
>
>     On Jun 2, 2013, at 6:02 PM, Brian Goetz <brian.goetz at oracle.com
>     <mailto:brian.goetz at oracle.com>> wrote:
>
>     >> Is Optional crippled if we consider that it's just an object
>     that represent a value or no value ?
>     >> I don't think so.
>     >
>     > Of the people that have an opinion on this subject, you would be
>     in a very, very, very, very, very small minority.  I have received
>     over a hundred e-mails and tweets on the subject where people are
>     essentially saying "optional is crippled without these" -- and
>     none expressing the opposite opinion.  I realize this is vastly
>     unscientific, and it represents a vanishingly small and
>     self-selected portion of the Java developer base, but of the
>     people who care, it is basically lots of people saying "we need
>     this" vs a few saying "but if I give it to you, others will misuse
>     it."
>     >
>     >>> It is something we want to avoid -- I will certainly avoid it
>     in my code, and criticize any code I see using this (or any of ten
>     million other bad programming techniques.)  The world is full of
>     useful tools that that interact dangerously, such as bleach and
>     ammonia or toasters and bathtubs.
>     >>
>     >> Wrong example, I don't know in US but in France you can not
>     have a power outlet too close to a bathlub :)
>     >> That's exactly what we are talking about.
>     >
>     > And extension cords are illegal in France too?  :)
>     >
>     >> But you can don't add these 3 methods because they send the
>     wrong message.
>     >
>     > I get what you're saying about what message it sends, and that's
>     a reasonable thing to worry about.  On the other hand, making
>     toasters illegal because we already have bathtubs and extension
>     cords is also worrisome.
>     >
>     > I would like to hear from other members of the EG on this.
>     >
>     >
>     >
>     >
>
>



More information about the lambda-libs-spec-experts mailing list