इसका उपयोग करने का एक अच्छा कारण यह है कि यह आपके नल को बहुत सार्थक बनाता है। एक अशक्त लौटाने के बजाय, जिसका अर्थ हो सकता है कि कई चीजें (जैसे त्रुटि, या विफलता, या खाली, आदि) आप अपने नल के लिए एक 'नाम' रख सकते हैं। इस उदाहरण को देखें:
एक बुनियादी 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);
}
}
अब अशक्त का उपयोग करने से बचें और वैकल्पिक के साथ हमारी जाँच करें ताकि इसका सार्थक हो
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());
}
इस प्रकार अंत में, अशक्तों को सार्थक बनाने का एक तरीका है, और कम अस्पष्टता।