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 <[email protected]> Authored: Mon May 16 15:23:45 2016 +0900 Committer: Markus Weimer <[email protected]> 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 + "}"; } }
