use new public class MaybeSupplier for Maybe instances backed by supplier so callers can access the supplier in cases where it might also provide other info such as Identifiable
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/784bc960 Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/784bc960 Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/784bc960 Branch: refs/heads/master Commit: 784bc960f926823be374fa05d3df3fd542ee857a Parents: 9d2faf0 Author: Alex Heneveld <[email protected]> Authored: Mon Sep 11 18:00:11 2017 +0100 Committer: Alex Heneveld <[email protected]> Committed: Fri Sep 15 10:29:08 2017 +0100 ---------------------------------------------------------------------- .../org/apache/brooklyn/util/guava/Maybe.java | 43 ++++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/784bc960/utils/common/src/main/java/org/apache/brooklyn/util/guava/Maybe.java ---------------------------------------------------------------------- diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/guava/Maybe.java b/utils/common/src/main/java/org/apache/brooklyn/util/guava/Maybe.java index b115acb..a68b400 100644 --- a/utils/common/src/main/java/org/apache/brooklyn/util/guava/Maybe.java +++ b/utils/common/src/main/java/org/apache/brooklyn/util/guava/Maybe.java @@ -183,29 +183,40 @@ public abstract class Maybe<T> implements Serializable, Supplier<T> { public T get() { return value.get(); } - @Override - public boolean isNull() { - // should always be false as per Optional contract - return get()==null; - } }; return absent(); } - public static <T> Maybe<T> of(final Supplier<T> value) { + @SuppressWarnings("unused") + private static <T> Maybe<T> ofOldKeptForDeserializationOfAnonymousInnerClass(final Supplier<T> value) { return new AbstractPresent<T>() { private static final long serialVersionUID = -5735268814211401356L; @Override public T get() { return value.get(); } - @Override - public boolean isNull() { - return get()==null; - } }; } + public static <T> Maybe<T> of(final Supplier<T> value) { + return new MaybeSupplier<T>(value); + } + + public static class MaybeSupplier<T> extends AbstractPresent<T> { + private static final long serialVersionUID = -823731500051341455L; + private Supplier<T> supplier; + public MaybeSupplier(Supplier<T> value) { + this.supplier = value; + } + @Override + public T get() { + return supplier.get(); + } + public Supplier<T> getSupplier() { + return supplier; + } + } + /** returns a Maybe containing the next element in the iterator, or absent if none */ public static <T> Maybe<T> next(Iterator<T> iterator) { return iterator.hasNext() ? Maybe.of(iterator.next()) : Maybe.<T>absent(); @@ -279,10 +290,6 @@ public abstract class Maybe<T> implements Serializable, Supplier<T> { public V get() { return f.apply(Maybe.this.get()); } - @Override - public boolean isNull() { - return get()==null; - } }; return absent(); } @@ -392,6 +399,10 @@ public abstract class Maybe<T> implements Serializable, Supplier<T> { protected AbstractPresent() { } @Override + public boolean isNull() { + return get()==null; + } + @Override public boolean isPresent() { return true; } @@ -407,10 +418,6 @@ public abstract class Maybe<T> implements Serializable, Supplier<T> { public T get() { return value; } - @Override - public boolean isNull() { - return value==null; - } } public static class SoftlyPresent<T> extends Maybe<T> {
