java.util.Optional fields
Remi Forax
forax at univ-mlv.fr
Fri Sep 21 09:36:31 PDT 2012
On 09/21/2012 06:02 PM, Vitaly Davidovich wrote:
>
> They're complementary, one doesn't replace the other. If I'm looking
> at a diff of a change outside of IDE, I'd like to have more context.
> I also may not want to pollute my code with @Nullable all over the place.
>
I like the @NotNull by default option exactly for that, if you stupidly
allow null everywhere,
you ends up with having to annotate your code with @Nullable all over
the place.
It's a great way to learn how to confine null where it's only necessary.
Now, to come back to Optional, Java has not a really good way to
currently deal with null,
Stephen Colebourne run several polls in 2009 [1] that shows that.
The real question is does Optional is the good answer.
There are several issues with Optional:
- it introduces a cost at runtime (see one of my previous post that
explain why the
VM will not remove it) that makes it useless as return value of
map.get() by example.
So it's only a solution where the cost of creating an object is
hidden by the cost
of doing the calculation in the loop.
- Optional should implements all methods and do nothing,
By example, users will want Optional to implement Iterable by
example to be able
use Optional in a for-each, or implements Comparable, etc.
Conceptually, Optional is a kind of kitchen sink but the type
system of Java will see it
as an ordinary object. The last time we chose a similar idea, it
was when we decide
to do the boxing using plain old Java classes instead of using type
known by the type system.
As a result, we can't use primitive type in generics.
- If Optional is introduced in java.util, we will see types like
List<Optional<T>>, i.e. types
that embody Optional, something you don't want with @NotNull.
I might be wrong, but for me Optional doesn't worth the pain it will
introduce.
Rémi
[1]
http://blog.joda.org/2009/01/jdk-7-language-changes-everyone-votes_4547.html
> Sent from my phone
>
> On Sep 21, 2012 11:55 AM, "Remi Forax" <forax at univ-mlv.fr
> <mailto:forax at univ-mlv.fr>> wrote:
>
> On 09/21/2012 05:46 PM, Vitaly Davidovich wrote:
> > The main benefit of Optional, to me, is that it clearly tells
> the caller or
> > receiver that this thing may be null; the conventional way is to
> document
> > pre/post conditions, but developers are notorious for not
> reading docs.
> > Returning/taking Optional is "in your face" - the fluent API is
> a secondary
> > convenience/benefit.
>
> Any decent IDEs (at least Eclipse and IDEA) understand
> @NonNull/@Nullable
> and can be easily configured to not compile if you try to call a
> method on
> something that is @Nullable.
>
> Are you suggesting that Optional is a runtime solution to a static
> analysis problem ?
>
> Rémi
>
> >
> > Sent from my phone
> > On Sep 21, 2012 11:42 AM, "Zhong Yu" <zhong.j.yu at gmail.com
> <mailto:zhong.j.yu at gmail.com>> wrote:
> >
> >> aren't all reference types in Java "optional" already? If
> "fluent" API
> >> is desired, is it possible to add methods to the null type?
> >>
> >> Zhong
> >>
> >>
>
>
More information about the lambda-dev
mailing list