Optional value can hold either a value or not. The value held in the Optional can be accessed using the
get() method, but it will throw a
NoSuchElementException if there is no value present. To avoid the exception, calling the isPresent() or !
isEmpty() method should always be done before any call to get().
Alternatively, note that other methods such as orElse(...), orElseGet(...) or orElseThrow(...) can be used
to specify what to do with an empty Optional.
Noncompliant code example
Optional<String> value = this.getOptionalValue();
// ...
String stringValue = value.get(); // Noncompliant
if (methodThatReturnsOptional().isEmpty()) {
throw new NotFoundException();
}
String value = methodThatReturnsOptional().get(); // Noncompliant: indirect access, we consider that two consecutive calls can return different values.
Compliant solution
this.getOptionalValue().ifPresent(stringValue ->
// Do something with stringValue
);
or
Optional<String> value = this.getOptionalValue();
// ...
if (value.isPresent()) {
String stringValue = value.get();
}
or
Optional<String> value = this.getOptionalValue();
// ...
String stringValue = value.orElse("default");
Optional<String> optional = methodThatReturnsOptional();
if (optional.isEmpty()) {
throw new NotFoundException();
}
String value = optional.get();