Why is this an issue?
The concept of Optional
is that it will be used when null
could cause errors. In a way, it replaces null
,
and when Optional
is in use, there should never be a question of returning or receiving null
from a call.
Noncompliant code example
public void doSomething () {
Optional<String> optional = getOptional();
if (optional != null) { // Noncompliant
// do something with optional...
}
Optional<String> text = null; // Noncompliant, a variable whose type is Optional should never itself be null
// ...
}
@Nullable // Noncompliant
public Optional<String> getOptional() {
// ...
return null; // Noncompliant
}
Compliant solution
public void doSomething () {
Optional<String> optional = getOptional();
optional.ifPresent(
// do something with optional...
);
Optional<String> text = Optional.empty();
// ...
}
public Optional<String> getOptional() {
// ...
return Optional.empty();
}