class PullRequest { String person; String summary; String comments; public PullRequest(String person, String summary, String comments) { super(); this.person = person; this.summary = summary; this.comments = comments; } public String getPerson() { return person; } public String getSummary() { return summary; } public String getComments() { return comments; } }
/** * Added suppression purely for demonstration purposes as the optional.of will never get called. * @return */ @SuppressWarnings("unused") private Optional<PullRequest> getPullRequestUsingGuavaOptional () { PullRequest pr = null; // make some data access call, if it isn't there return null if (pr == null) { return Optional.absent(); } else { return Optional.of(pr); } } @Test public void avoid_checking_for_null_with_guava_optional () { Optional<PullRequest> pr = getPullRequestUsingGuavaOptional (); if (pr.isPresent()) { PullRequest pullRequest = pr.get(); // proceed with further processing logger.info(pullRequest); } else { // do nothing logger.info("object was null"); } assertFalse(pr.isPresent()); }
Output
object was null
@Test public void get_first_non_null_object () { Optional<String> first = Optional.absent(); Optional<String> second = Optional.of("Game Day!"); assertEquals(second.get(), first.or(second).get()); }
@Test public void from_nullable() { Optional<PullRequest> pullRequest = Optional .fromNullable(new PullRequest("Jack", "summary", "comments")); assertTrue(pullRequest.isPresent()); }
@Test public void present_instances () { List<Optional<PullRequest>> pullRequests = Lists.newArrayList(); pullRequests.add(getPullRequestUsingGuavaOptional()); pullRequests.add(Optional.of(new PullRequest("Graham", "a->b summary", "please merge"))); pullRequests.add(getPullRequestUsingGuavaOptional()); pullRequests.add(Optional.of(new PullRequest("Jesse", "c->d summary", "check code"))); Iterable<PullRequest> presentInstances = Optional.presentInstances(pullRequests); assertThat(presentInstances, IsIterableWithSize.<PullRequest>iterableWithSize(2)); }
private PullRequest getPullRequestReturningNull () { PullRequest pr = null; // make some data access call, if it isn't there return null return pr; } @Test public void returning_null_in_java () { PullRequest pr = getPullRequestReturningNull(); if (pr != null) { pr.getComments(); } }