これを使用する理由の1つは、ヌルを非常に意味のあるものにすることです。多くのことを意味する可能性のあるnullを返す代わりに(エラー、失敗、空など)、nullに「名前」を付けることができます。この例を見てください:
基本的なPOJOを定義しましょう:
class PersonDetails {
String person;
String comments;
public PersonDetails(String person, String comments) {
this.person = person;
this.comments = comments;
}
public String getPerson() {
return person;
}
public String getComments() {
return comments;
}
}
次に、この単純なPOJOを使用します。
public Optional<PersonDetails> getPersonDetailstWithOptional () {
PersonDetails details = null; /*details of the person are empty but to the caller this is meaningless,
lets make the return value more meaningful*/
if (details == null) {
//return an absent here, caller can check for absent to signify details are not present
return Optional.absent();
} else {
//else return the details wrapped in a guava 'optional'
return Optional.of(details);
}
}
ここで、nullの使用を避け、オプションでチェックを実行して、意味のあるものにします。
public void checkUsingOptional () {
Optional<PersonDetails> details = getPersonDetailstWithOptional();
/*below condition checks if persons details are present (notice we dont check if person details are null,
we use something more meaningful. Guava optional forces this with the implementation)*/
if (details.isPresent()) {
PersonDetails details = details.get();
// proceed with further processing
logger.info(details);
} else {
// do nothing
logger.info("object was null");
}
assertFalse(details.isPresent());
}
したがって、最終的にはnullを意味のあるものにし、あいまいさを減らす方法です。