T - the type of instance that can be contained.
Optional is naturally covariant on this type, so it is safe to cast an
Optional<T> to
Optional<S> for any supertype
S of
T.
@GwtCompatible(serializable=true) public abstract class Optional<T> extends Objectimplements Serializable
null".
A non-null Optional<T> reference can be used as a replacement for a nullable T reference. It allows you to represent "a T that must be present" and a "a T that might be absent" as two distinct types in your program, which can aid clarity.
Some uses of this class include
null to indicate that no value was available Optional.absent()) null (though there are several other approaches to this that should be considered first) A common alternative to using this class is to find or create a suitable null object for the type in question.
This class is not intended as a direct analogue of any existing "option" or "maybe" construct from other programming environments, though it may bear some similarities.
See the Guava User Guide article on using Optional.
| Modifier and Type | Method and Description |
|---|---|
static <T> Optional |
absent()
Returns an
Optional instance with no contained reference.
|
abstract Set |
asSet()
|
abstract boolean |
equals(Object
Returns
true if
object is an
Optional instance, and either the contained references are
equal to each other or both are absent.
|
static <T> Optional |
fromNullable(T nullableReference)
If
nullableReference is non-null, returns an
Optional instance containing that reference; otherwise returns
absent().
|
abstract T |
get()
Returns the contained instance, which must be present.
|
abstract int |
hashCode()
Returns a hash code for this instance.
|
abstract boolean |
isPresent()
Returns
true if this holder contains a (non-null) instance.
|
static <T> Optional |
of(T reference)
Returns an
Optional instance containing the given non-null reference.
|
abstract Optional |
or(Optional
Returns this
Optional if it has a value present;
secondChoice otherwise.
|
abstract T |
or(Supplier
Returns the contained instance if it is present;
supplier.get() otherwise.
|
abstract T |
or(T defaultValue)
Returns the contained instance if it is present;
defaultValue otherwise.
|
abstract T |
orNull()
Returns the contained instance if it is present;
null otherwise.
|
static <T> Iterable |
presentInstances(Iterable
Returns the value of each present instance from the supplied
optionals, in order, skipping over occurrences of
absent().
|
abstract String |
toString()
Returns a string representation for this instance.
|
abstract <V> Optional |
transform(Function
|
public static <T> Optional<T> absent()
Optional instance with no contained reference.
public static <T> Optional<T> of(T reference)
Optional instance containing the given non-null reference.
public static <T> Optional<T> fromNullable(T nullableReference)
nullableReference is non-null, returns an
Optional instance containing that reference; otherwise returns
absent().
public abstract boolean isPresent()
true if this holder contains a (non-null) instance.
public abstract T get()
or(Object) or
orNull() instead.
IllegalStateException - if the instance is absent (
isPresent() returns
false)
public abstract T or(T defaultValue)
defaultValue otherwise. If no default value should be required because the instance is known to be present, use
get() instead. For a default value of
null, use
orNull().
Note about generics: The signature public T or(T defaultValue) is overly restrictive. However, the ideal signature, public <S super T> S or(S), is not legal Java. As a result, some sensible operations involving subtypes are compile errors:
Optional<Integer> optionalInt = getSomeOptionalInt(); Number value = optionalInt.or(0.5); // error FluentIterable<? extends Number> numbers = getSomeNumbers(); Optional<? extends Number> first = numbers.first(); Number value = first.or(0.5); // error
As a workaround, it is always safe to cast an Optional<? extends T> to Optional<T>. Casting either of the above example Optional instances to Optional<Number> (where Number is the desired output type) solves the problem:
Optional<Number> optionalInt = (Optional) getSomeOptionalInt(); Number value = optionalInt.or(0.5); // fine FluentIterable<? extends Number> numbers = getSomeNumbers(); Optional<Number> first = (Optional) numbers.first(); Number value = first.or(0.5); // fine
public abstract Optional<T> or(Optional <? extends T> secondChoice)
Optional if it has a value present;
secondChoice otherwise.
@Beta public abstract T or(Supplier<? extends T> supplier)
supplier.get() otherwise. If the supplier returns
null, a
NullPointerException is thrown.
NullPointerException - if the supplier returns
null
public abstract T orNull()
null otherwise. If the instance is known to be present, use
get() instead.
public abstract Set<T> asSet()
Set whose only element is the contained instance if it is present; an empty immutable
Set otherwise.
public abstract <V> Optional<V> transform(Function <? super T ,V> function)
Function; otherwise,
absent() is returned. If the function returns
null, a
NullPointerException is thrown.
NullPointerException - if the function returns
null
public abstract boolean equals(Objectobject)
true if
object is an
Optional instance, and either the contained references are
equal to each other or both are absent. Note that
Optional instances of differing parameterized types can be equal.
public abstract int hashCode()
public abstract StringtoString()
@Beta public static <T> Iterable<T> presentInstances(Iterable <? extends Optional <? extends T>> optionals)
optionals, in order, skipping over occurrences of
absent(). Iterators are unmodifiable and are evaluated lazily.