hg: jdk8/tl/jdk: 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
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@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
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. I also wonder why a marker interface wasn't used or something more substantial at least for methods like isPresent(). Also why does the static factory initialization parameters use primatives as opposed to objects? 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? On Mar 19, 2013 7:18 PM, <mike.duigou@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@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
On Mar 19, 2013, at 9:43 PM, Rob Leland <the.rob.leland@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. Mike
On Mar 19, 2013 7:18 PM, <mike.duigou@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@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
Has the optional classes been verified to serialize/deserialize correctly?
They are not serializable.
Finally, are these utilities critical to some other part JDK 8 that they were pushed out now as opposed to JDK 9?
They are part of the libraries being added by JSR-335 / Project Lambda. There is extensive discussion on Optional on lambda-dev and the JSR 335 EG lists.
participants (4)
-
Brian Goetz
-
Mike Duigou
-
mike.duigou@oracle.com
-
Rob Leland