You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@reef.apache.org by we...@apache.org on 2016/05/17 15:29:09 UTC

reef git commit: [REEF-1390] Compute Optional Class' methods on demand

Repository: reef
Updated Branches:
  refs/heads/master cce59bbdd -> 8ecb3e676


[REEF-1390] Compute Optional Class' methods on demand

This PR:
- fixes `util/Optional` so that computation for `hashCode()` and
  `toString()` are done upon function calls.
- fixes `util/Optional` so that requesting for empty `Optional`s return
  a reference of a static variable instead of making new objects every time.

JIRA:
  [REEF-1390](https://issues.apache.org/jira/browse/REEF-1390)

Pull Request:
  This closes #1003


Project: http://git-wip-us.apache.org/repos/asf/reef/repo
Commit: http://git-wip-us.apache.org/repos/asf/reef/commit/8ecb3e67
Tree: http://git-wip-us.apache.org/repos/asf/reef/tree/8ecb3e67
Diff: http://git-wip-us.apache.org/repos/asf/reef/diff/8ecb3e67

Branch: refs/heads/master
Commit: 8ecb3e6765a11202e6d2b7f9b192bd6b66d8a061
Parents: cce59bb
Author: Won Wook SONG <ws...@gmail.com>
Authored: Mon May 16 15:23:45 2016 +0900
Committer: Markus Weimer <we...@apache.org>
Committed: Tue May 17 08:27:17 2016 -0700

----------------------------------------------------------------------
 .../src/main/java/org/apache/reef/util/Optional.java  | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/reef/blob/8ecb3e67/lang/java/reef-utils/src/main/java/org/apache/reef/util/Optional.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-utils/src/main/java/org/apache/reef/util/Optional.java b/lang/java/reef-utils/src/main/java/org/apache/reef/util/Optional.java
index 93927c1..517ff3a 100644
--- a/lang/java/reef-utils/src/main/java/org/apache/reef/util/Optional.java
+++ b/lang/java/reef-utils/src/main/java/org/apache/reef/util/Optional.java
@@ -35,19 +35,15 @@ public final class Optional<T> implements Serializable {
   private static final long serialVersionUID = 42L;
 
   private final T value;
-  private final String valueStr;
-  private final int valueHash;
+  private static final Optional<?> EMPTY = new Optional<>();
+  private static final String EMPTY_VALUE_STR = "Optional.empty";
 
   private Optional(final T value) {
     this.value = value;
-    this.valueStr = "Optional:{" + value + '}';
-    this.valueHash = value.hashCode();
   }
 
   private Optional() {
     this.value = null;
-    this.valueStr = "OptionalvNothing";
-    this.valueHash = 0;
   }
 
   /**
@@ -65,7 +61,7 @@ public final class Optional<T> implements Serializable {
    * @return an Optional with no value.
    */
   public static <T> Optional<T> empty() {
-    return new Optional<>();
+    return (Optional<T>) EMPTY;
   }
 
   /**
@@ -122,11 +118,11 @@ public final class Optional<T> implements Serializable {
 
   @Override
   public int hashCode() {
-    return this.valueHash;
+    return this.value == null ? 0 : this.value.hashCode();
   }
 
   @Override
   public String toString() {
-    return this.valueStr;
+    return this.value == null ? EMPTY_VALUE_STR : "Optional:{" + this.value + "}";
   }
 }