Class Optional<T>
- java.lang.Object
-
- com.google.common.base.Optional<T>
-
- Type Parameters:
T- the type of instance that can be contained.Optionalis naturally covariant on this type, so it is safe to cast anOptional<T>toOptional<S>for any supertypeSofT.
- All Implemented Interfaces:
java.io.Serializable
@GwtCompatible(serializable=true) public abstract class Optional<T> extends java.lang.Object implements java.io.Serializable
An immutable object that may contain a non-null reference to another object. Each instance of this type either contains a non-null reference, or contains nothing (in which case we say that the reference is "absent"); it is never said to "containnull".A non-null
Optional<T>reference can be used as a replacement for a nullableTreference. It allows you to represent "aTthat must be present" and a "aTthat might be absent" as two distinct types in your program, which can aid clarity.Some uses of this class include
- As a method return type, as an alternative to returning
nullto indicate that no value was available - To distinguish between "unknown" (for example, not present in a map) and
"known to have no value" (present in the map, with value
Optional.absent()) - To wrap nullable references for storage in a collection that does not
support
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.- Since:
- 10.0
- See Also:
- Serialized Form
-
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description static <T> Optional<T>absent()Returns anOptionalinstance with no contained reference.abstract java.util.Set<T>asSet()Returns an immutable singletonSetwhose only element is the contained instance if it is present; an empty immutableSetotherwise.abstract booleanequals(java.lang.Object object)Returnstrueifobjectis anOptionalinstance, and either the contained references are equal to each other or both are absent.static <T> Optional<T>fromNullable(T nullableReference)IfnullableReferenceis non-null, returns anOptionalinstance containing that reference; otherwise returnsabsent().abstract Tget()Returns the contained instance, which must be present.abstract inthashCode()Returns a hash code for this instance.abstract booleanisPresent()Returnstrueif this holder contains a (non-null) instance.static <T> Optional<T>of(T reference)Returns anOptionalinstance containing the given non-null reference.abstract Optional<T>or(Optional<? extends T> secondChoice)Returns thisOptionalif it has a value present;secondChoiceotherwise.abstract Tor(Supplier<? extends T> supplier)Returns the contained instance if it is present;supplier.get()otherwise.abstract Tor(T defaultValue)Returns the contained instance if it is present;defaultValueotherwise.abstract TorNull()Returns the contained instance if it is present;nullotherwise.static <T> java.lang.Iterable<T>presentInstances(java.lang.Iterable<? extends Optional<? extends T>> optionals)Returns the value of each present instance from the suppliedoptionals, in order, skipping over occurrences ofabsent().abstract java.lang.StringtoString()Returns a string representation for this instance.abstract <V> Optional<V>transform(Function<? super T,V> function)
-
-
-
Method Detail
-
absent
public static <T> Optional<T> absent()
Returns anOptionalinstance with no contained reference.
-
of
public static <T> Optional<T> of(T reference)
Returns anOptionalinstance containing the given non-null reference.
-
fromNullable
public static <T> Optional<T> fromNullable(@Nullable T nullableReference)
IfnullableReferenceis non-null, returns anOptionalinstance containing that reference; otherwise returnsabsent().
-
isPresent
public abstract boolean isPresent()
Returnstrueif this holder contains a (non-null) instance.
-
get
public abstract T get()
Returns the contained instance, which must be present. If the instance might be absent, useor(Object)ororNull()instead.- Throws:
java.lang.IllegalStateException- if the instance is absent (isPresent()returnsfalse)
-
or
public abstract T or(T defaultValue)
Returns the contained instance if it is present;defaultValueotherwise. If no default value should be required because the instance is known to be present, useget()instead. For a default value ofnull, useorNull().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); // errorAs a workaround, it is always safe to cast an
Optional<? extends T>toOptional<T>. Casting either of the above exampleOptionalinstances toOptional<Number>(whereNumberis 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
-
or
public abstract Optional<T> or(Optional<? extends T> secondChoice)
Returns thisOptionalif it has a value present;secondChoiceotherwise.
-
or
@Beta public abstract T or(Supplier<? extends T> supplier)
Returns the contained instance if it is present;supplier.get()otherwise. If the supplier returnsnull, aNullPointerExceptionis thrown.- Throws:
java.lang.NullPointerException- if the supplier returnsnull
-
orNull
@Nullable public abstract T orNull()
Returns the contained instance if it is present;nullotherwise. If the instance is known to be present, useget()instead.
-
asSet
public abstract java.util.Set<T> asSet()
Returns an immutable singletonSetwhose only element is the contained instance if it is present; an empty immutableSetotherwise.- Since:
- 11.0
-
transform
public abstract <V> Optional<V> transform(Function<? super T,V> function)
If the instance is present, it is transformed with the givenFunction; otherwise,absent()is returned. If the function returnsnull, aNullPointerExceptionis thrown.- Throws:
java.lang.NullPointerException- if the function returnsnull- Since:
- 12.0
-
equals
public abstract boolean equals(@Nullable java.lang.Object object)
Returnstrueifobjectis anOptionalinstance, and either the contained references are equal to each other or both are absent. Note thatOptionalinstances of differing parameterized types can be equal.- Overrides:
equalsin classjava.lang.Object
-
hashCode
public abstract int hashCode()
Returns a hash code for this instance.- Overrides:
hashCodein classjava.lang.Object
-
toString
public abstract java.lang.String toString()
Returns a string representation for this instance. The form of this string representation is unspecified.- Overrides:
toStringin classjava.lang.Object
-
presentInstances
@Beta public static <T> java.lang.Iterable<T> presentInstances(java.lang.Iterable<? extends Optional<? extends T>> optionals)
Returns the value of each present instance from the suppliedoptionals, in order, skipping over occurrences ofabsent(). Iterators are unmodifiable and are evaluated lazily.- Since:
- 11.0 (generics widened in 13.0)
-
-