I have a question regarding Java 8's Optional, the purpose of which is to tackle NullPointerException
exceptions.
The question is, what is the reason for having both types to let us choose:
Optional.of(T value) <-----non-null value, null value will throw NPE
Optional.ofNullable(T value) <----- nullable value
Because what I expect is, when I use:
Optional.of(nullValue);
It won't throw a NullPointerException
.
Expanded my question after some replies:
Why would people opt for Optional instead of normal if-else
for null checking?
The javadoc of Optional.of
reads that explicitly :
@throws NullPointerException if value is null
and that is where the requirement of handling the cases as expected by you comes into picture with the use of Optional.ofNullable
which is a small block of code as :
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value); // 'Optional.of'
}
That said, the decision of choosing one over the other would still reside with the application design as if your value
could possibly be null
or not.
On your expectation part, that was not what the Optional
was actually intended for. The API note clarifies this further (formatting mine):
Optional
is primarily intended for use as a method return type where there is a clear need to represent "no result," and where usingnull
is likely to cause error. A variable whose type isOptional
should never itself benull
; it should always point to anOptional
instance.
purpose of Optional is to tackle NullPointerException exception.
Aside: Just to call it out clearly, that the choice would of course implicitly let you define if an NPE should be thrown at runtime or not. It's not determined at the compile time though.
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments