Chapter 6. The Optional Type
Sigh, why does everything related to Optional have to take 300 messages?
Brian Goetz, lambda-libs-spec-experts mailing list (October 23, 2013)
The Java 8 API introduced a new class called java.util.Optional<T>. While many developers assume that the goal of Optional is to remove NullPointerExceptions from your code, that’s not its real purpose. Instead, Optional is designed to communicate to the user when a returned value may legitimately be null. This situation can arise whenever a stream of values is filtered by some condition that happens to leave no elements remaining.
In the Stream API, the following methods return an Optional if no elements remain in the stream: reduce, min, max, findFirst, findAny.
An instance of Optional can be in one of two states: a reference to an instance of type T, or empty. The former case is called present, and the latter is known as empty (as opposed to null).
Warning
While Optional is a reference type, it should never be assigned a value of null. Doing so is a serious error.
This chapter looks at the idiomatic ways to use Optional. While the proper use of Optional is likely to be a lively source of discussions in your company,1 the good news is that there are standard recommendations for its proper use. Following these principles should help keep your intentions clear and maintainable.
6.1 Creating an Optional
Problem
You need to return an Optional from an existing value.
Solution
Use Optional.of, Optional.ofNullable ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access