diff --git a/core/src/main/java/fj/P1.java b/core/src/main/java/fj/P1.java index 5ae82a97..ddb0d04d 100644 --- a/core/src/main/java/fj/P1.java +++ b/core/src/main/java/fj/P1.java @@ -9,7 +9,7 @@ import fj.data.Option; import fj.data.Validation; //import fj.data.*; -import fj.function.Try0; + public abstract class P1 implements F0 { @@ -216,22 +216,28 @@ public P1 memo() { final P1 self = this; return new P1() { private final Object latch = new Object(); - @SuppressWarnings({"InstanceVariableMayNotBeInitialized"}) - private volatile SoftReference v; + private volatile SoftReference> v = null; + @Override public A _1() { - A a = v != null ? v.get() : null; - if (a == null) + Option o = v != null ? v.get() : null; + if (o == null) { synchronized (latch) { - if (v == null || v.get() == null) { - a = self._1(); - v = new SoftReference(a); - } else { - a = v.get(); + o = v != null ? v.get() : null; + if (o == null) { + o = Option.some(self._1()); + v = new SoftReference<>(o); } } - return a; + } + return o.some(); + } + + @Override + public P1 memo() { + return this; } + }; }