Modifier and Type | Field and Description |
---|---|
private T |
reference |
private static long |
serialVersionUID |
Modifier and Type | Method and Description |
---|---|
java.util.Set<T> |
asSet()
Returns an immutable singleton
Set whose only element is the contained instance if it
is present; an empty immutable Set otherwise. |
boolean |
equals(java.lang.Object object)
Returns
true if object is an Optional instance, and either the
contained references are equal to each other or both are absent. |
T |
get()
Returns the contained instance, which must be present.
|
int |
hashCode()
Returns a hash code for this instance.
|
boolean |
isPresent()
Returns
true if this holder contains a (non-null) instance. |
Optional<T> |
or(Optional<? extends T> secondChoice)
Returns this
Optional if it has a value present; secondChoice otherwise. |
T |
or(Supplier<? extends T> supplier)
Returns the contained instance if it is present;
supplier.get() otherwise. |
T |
or(T defaultValue)
Returns the contained instance if it is present;
defaultValue otherwise. |
T |
orNull()
Returns the contained instance if it is present;
null otherwise. |
java.lang.String |
toString()
Returns a string representation for this instance.
|
<V> Optional<V> |
transform(Function<? super T,V> function)
If the instance is present, it is transformed with the given
Function ; otherwise,
Optional.absent() is returned. |
absent, fromJavaUtil, fromNullable, of, presentInstances, toJavaUtil, toJavaUtil
private final T reference
private static final long serialVersionUID
Present(T reference)
public boolean isPresent()
Optional
true
if this holder contains a (non-null) instance.
Comparison to java.util.Optional
: no differences.
public T get()
Optional
Optional.or(Object)
or Optional.orNull()
instead.
Comparison to java.util.Optional
: when the value is absent, this method
throws IllegalStateException
, whereas the Java 8 counterpart throws NoSuchElementException
.
public T or(T defaultValue)
Optional
defaultValue
otherwise. If no default
value should be required because the instance is known to be present, use Optional.get()
instead. For a default value of null
, use Optional.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
Comparison to java.util.Optional
: this method is similar to Java 8's Optional.orElse
, but will not accept null
as a defaultValue
(Optional.orNull()
must be used instead). As a result, the value returned by this method is guaranteed non-null,
which is not the case for the java.util
equivalent.
public Optional<T> or(Optional<? extends T> secondChoice)
Optional
Optional
if it has a value present; secondChoice
otherwise.
Comparison to java.util.Optional
: this method has no equivalent in Java 8's
Optional
class; write thisOptional.isPresent() ? thisOptional : secondChoice
instead.
public T or(Supplier<? extends T> supplier)
Optional
supplier.get()
otherwise.
Comparison to java.util.Optional
: this method is similar to Java 8's Optional.orElseGet
, except when supplier
returns null
. In this case this
method throws an exception, whereas the Java 8 method returns the null
to the caller.
public T orNull()
Optional
null
otherwise. If the instance is
known to be present, use Optional.get()
instead.
Comparison to java.util.Optional
: this method is equivalent to Java 8's
Optional.orElse(null)
.
public java.util.Set<T> asSet()
Optional
Set
whose only element is the contained instance if it
is present; an empty immutable Set
otherwise.
Comparison to java.util.Optional
: this method has no equivalent in Java 8's
Optional
class. However, this common usage:
for (Foo foo : possibleFoo.asSet()) {
doSomethingWith(foo);
}
... can be replaced with:
possibleFoo.ifPresent(foo -> doSomethingWith(foo));
Java 9 users: some use cases can be written with calls to optional.stream()
.
public <V> Optional<V> transform(Function<? super T,V> function)
Optional
Function
; otherwise,
Optional.absent()
is returned.
Comparison to java.util.Optional
: this method is similar to Java 8's Optional.map
, except when function
returns null
. In this case this method
throws an exception, whereas the Java 8 method returns Optional.absent()
.
public boolean equals(@CheckForNull java.lang.Object object)
Optional
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.
Comparison to java.util.Optional
: no differences.
public int hashCode()
Optional
Comparison to java.util.Optional
: this class leaves the specific choice of
hash code unspecified, unlike the Java 8 equivalent.
public java.lang.String toString()
Optional
Comparison to java.util.Optional
: this class leaves the specific string
representation unspecified, unlike the Java 8 equivalent.