hg: jdk8/tl/jdk: 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mike.duigou at oracle.com
Wed Mar 20 05:11:03 UTC 2013
On Mar 19, 2013, at 9:43 PM, Rob Leland <the.rob.leland at gmail.com> wrote:
> Has the optional classes been verified to serialize/deserialize correctly? I noticed it tries to use the null object pattern with the use of EMPTY private instance. When I have implemented the NULL pattern I have used a private subclass of the object as opposed to an instance variable to insure it unmarshalls correctly with a simple override of the default desearization to insure this.
They are not tagged as Serializable. Optionals are intended to be transitory. A readResolve to re-associate with the EMPTY instance would be important if they were serializable.
> I also wonder why a marker interface wasn't used or something more substantial at least for methods like isPresent().
I am not sure what you are looking for in this question.
> Also why does the static factory initialization parameters use primatives as opposed to objects?
The OptionalInt etc are intended to be Optional counterparts to the boxed types. If you prefer Optional of the boxed types you can use the reference Optional.
> If objects were used then there would be the oppertunity to use a abstract base class, which has the potential to move the use of isPresent() strictly into the base class.
> Finally, are these utilities critical to some other part JDK 8 that they were pushed out now as opposed to JDK 9?
They are currently planned for use by the lambda streams libraries. See http://openjdk.java.net/projects/lambda/ and http://jdk8.java.net/lambda/ for more info and an implementation.
> On Mar 19, 2013 7:18 PM, <mike.duigou at oracle.com> wrote:
> Changeset: 2241a2d34085
> Author: mduigou
> Date: 2013-03-19 16:05 -0700
> URL: http://hg.openjdk.java.net/jdk8/tl/jdk/rev/2241a2d34085
> 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
> Reviewed-by: mduigou, darcy, alanb, jjb
> Contributed-by: Brian Goetz <brian.goetz at oracle.com>
> + src/share/classes/java/util/Optional.java
> + src/share/classes/java/util/OptionalDouble.java
> + src/share/classes/java/util/OptionalInt.java
> + src/share/classes/java/util/OptionalLong.java
> + test/java/util/Optional/Basic.java
> + test/java/util/Optional/BasicDouble.java
> + test/java/util/Optional/BasicInt.java
> + test/java/util/Optional/BasicLong.java
More information about the core-libs-dev