summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/data/Option.java
diff options
context:
space:
mode:
authorBen Culkin <scorpress@gmail.com>2021-02-26 16:15:54 -0500
committerBen Culkin <scorpress@gmail.com>2021-02-26 16:15:54 -0500
commita7352711e1d6c36b16235c042e139946ad6fb35c (patch)
tree914d2232b2309af3d1468fd56e15e741e3080f44 /src/main/java/bjc/data/Option.java
parent7783bf18664f45c76fe4e5f583dac0803087de95 (diff)
Update
Diffstat (limited to 'src/main/java/bjc/data/Option.java')
-rw-r--r--src/main/java/bjc/data/Option.java19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/main/java/bjc/data/Option.java b/src/main/java/bjc/data/Option.java
index 6c76d59..6ca8b13 100644
--- a/src/main/java/bjc/data/Option.java
+++ b/src/main/java/bjc/data/Option.java
@@ -13,7 +13,15 @@ import java.util.function.UnaryOperator;
*/
public class Option<ContainedType> implements Holder<ContainedType> {
private ContainedType held;
-
+ private boolean isHolding;
+
+ /**
+ * Create a new empty optional.
+ */
+ public Option() {
+ isHolding = false;
+ }
+
/**
* Create a new optional, using the given initial value.
*
@@ -22,12 +30,13 @@ public class Option<ContainedType> implements Holder<ContainedType> {
*/
public Option(final ContainedType seed) {
held = seed;
+ isHolding = true;
}
@Override
public <BoundType> Holder<BoundType>
bind(final Function<ContainedType, Holder<BoundType>> binder) {
- if (held == null) return new Option<>(null);
+ if (isHolding) return new Option<>();
return binder.apply(held);
}
@@ -41,7 +50,7 @@ public class Option<ContainedType> implements Holder<ContainedType> {
@Override
public <MappedType> Holder<MappedType>
map(final Function<ContainedType, MappedType> mapper) {
- if (held == null) return new Option<>(null);
+ if (isHolding) return new Option<>();
return new Option<>(mapper.apply(held));
}
@@ -49,7 +58,7 @@ public class Option<ContainedType> implements Holder<ContainedType> {
@Override
public Holder<ContainedType>
transform(final UnaryOperator<ContainedType> transformer) {
- if (held != null) held = transformer.apply(held);
+ if (isHolding) held = transformer.apply(held);
return this;
}
@@ -57,7 +66,7 @@ public class Option<ContainedType> implements Holder<ContainedType> {
@Override
public <UnwrappedType> UnwrappedType
unwrap(final Function<ContainedType, UnwrappedType> unwrapper) {
- if (held == null) return null;
+ if (isHolding) return null;
return unwrapper.apply(held);
}