Một lý do tốt để sử dụng nó là nó làm cho nulls của bạn rất có ý nghĩa. Thay vì trả về giá trị null có thể có nghĩa là nhiều thứ (như lỗi, hoặc thất bại, hoặc trống, v.v.), bạn có thể đặt 'tên' cho null của mình. Hãy xem ví dụ này:
cho phép xác định một POJO cơ bản:
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;
}
}
Bây giờ chúng ta hãy sử dụng POJO đơn giản này:
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);
}
}
Bây giờ, hãy tránh sử dụng null và thực hiện kiểm tra của chúng tôi với Tùy chọn để nó có ý nghĩa
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());
}
do đó cuối cùng nó là một cách để làm cho null có ý nghĩa và ít mơ hồ hơn.