diff options
Diffstat (limited to 'lib/java/src/main/java/org/apache/thrift/Option.java')
-rw-r--r-- | lib/java/src/main/java/org/apache/thrift/Option.java | 205 |
1 files changed, 104 insertions, 101 deletions
diff --git a/lib/java/src/main/java/org/apache/thrift/Option.java b/lib/java/src/main/java/org/apache/thrift/Option.java index 6b036df96..601bcc16a 100644 --- a/lib/java/src/main/java/org/apache/thrift/Option.java +++ b/lib/java/src/main/java/org/apache/thrift/Option.java @@ -21,120 +21,123 @@ package org.apache.thrift; import java.util.Optional; -/** - * Implementation of the Option type pattern - */ +/** Implementation of the Option type pattern */ public abstract class Option<T> { - @SuppressWarnings("rawtypes") - private static final Option NONE = new None(); - - /** - * Whether the Option is defined or not - * @return - * true if the Option is defined (of type Some) - * false if the Option is not defined (of type None) - */ - public abstract boolean isDefined(); - - /** - * Get the value of the Option (if it is defined) - * @return the value - * @throws IllegalStateException if called on a None - */ - public abstract T get(); - - /** - * Get the contained value (if defined) or else return a default value - * @param other what to return if the value is not defined (a None) - * @return either the value, or other if the value is not defined - */ - public T or(T other) { - if (isDefined()) { - return get(); - } else { - return other; - } + @SuppressWarnings("rawtypes") + private static final Option NONE = new None(); + + /** + * Whether the Option is defined or not + * + * @return true if the Option is defined (of type Some) false if the Option is not defined (of + * type None) + */ + public abstract boolean isDefined(); + + /** + * Get the value of the Option (if it is defined) + * + * @return the value + * @throws IllegalStateException if called on a None + */ + public abstract T get(); + + /** + * Get the contained value (if defined) or else return a default value + * + * @param other what to return if the value is not defined (a None) + * @return either the value, or other if the value is not defined + */ + public T or(T other) { + if (isDefined()) { + return get(); + } else { + return other; + } + } + + /** + * Turn this Option into Java 8 Optional type + * + * @return Java 8+ Optional Type + */ + public Optional<T> toOptional() { + if (isDefined()) { + return Optional.of(get()); + } else { + return Optional.empty(); } + } - /** - * Turn this Option into Java 8 Optional type - * @return Java 8+ Optional Type - */ - public Optional<T> toOptional() { - if (isDefined()) { - return Optional.of(get()); - } else { - return Optional.empty(); - } + /** The None type, representing an absent value (instead of "null") */ + public static class None<T> extends Option<T> { + public boolean isDefined() { + return false; } - /** - * The None type, representing an absent value (instead of "null") - */ - public static class None<T> extends Option<T> { - public boolean isDefined() { - return false; - } - - public T get() { - throw new IllegalStateException("Cannot call get() on None"); - } - - public String toString() { - return "None"; - } + public T get() { + throw new IllegalStateException("Cannot call get() on None"); } - /** - * The Some type, representing an existence of some value - * @param <T> The type of value - */ - public static class Some<T> extends Option<T> { - private final T value; - public Some(T value) { - this.value = value; - } - - public boolean isDefined() { - return true; - } - - public T get() { - return value; - } - - public String toString() { - return "Some(" + value + ")"; - } + public String toString() { + return "None"; + } + } + + /** + * The Some type, representing an existence of some value + * + * @param <T> The type of value + */ + public static class Some<T> extends Option<T> { + private final T value; + + public Some(T value) { + this.value = value; } - /** - * Wraps value in an Option type, depending on whether or not value is null - * @param value the value to wrap in Option - * @param <T> the type of value - * @return Some(value) if value is not null, None if value is null - */ - public static <T> Option<T> fromNullable(T value) { - if (value != null) { - return some(value); - } else { - return none(); - } + public boolean isDefined() { + return true; } - /** - * Wrap value in a Some type (NB! value must not be null!) - * @param value the value to wrap. - * @param <T> the type of value - * @return a new Some(value) - */ - public static <T> Some<T> some(T value) { - return new Some<T>(value); + public T get() { + return value; } - @SuppressWarnings("unchecked") - public static <T> None<T> none() { - return (None<T>) NONE; + public String toString() { + return "Some(" + value + ")"; + } + } + + /** + * Wraps value in an Option type, depending on whether or not value is null + * + * @param value the value to wrap in Option + * @param <T> the type of value + * @return Some(value) if value is not null, None if value is null + */ + public static <T> Option<T> fromNullable(T value) { + if (value != null) { + return some(value); + } else { + return none(); } + } + + /** + * Wrap value in a Some type (NB! value must not be null!) + * + * @param value the value to wrap. + * @param <T> the type of value + * @return a new Some(value) + */ + public static <T> Some<T> some(T value) { + return new Some<T>(value); + } + + @SuppressWarnings("unchecked") + public static <T> None<T> none() { + return (None<T>) NONE; + } } |