Effective java Item 43 states return empty arrays or collections, not nulls. In practice you should return the same immutable empty collection every time you return a collection. There are a few ways to handle the exception to the rule when you encounter methods that should return a collection but instead return null. Check out return empty map , return empty set , return empty enumeration , return empty list iterator , return empty sorted set , return empty sorted map , return empty sorted set , return empty sorted map and return empty iterator when having to deal with other collection types.
Straight up Java @Test
public void return_empty_list_java () {
List < String > emptyList = Collections . emptyList ();
assertTrue ( emptyList . isEmpty ());
}
Google Guava @Test
public void return_empty_list_guava () {
List < String > emptyList = ImmutableList . of ();
assertTrue ( emptyList . isEmpty ());
}
Apache Commons @Test
public void return_empty_list_apache_commons () {
@SuppressWarnings ( "unchecked" )
List < String > emptyList = ListUtils . EMPTY_LIST ;
assertTrue ( emptyList . isEmpty ());
}
Exception to the rule The goal is to handle the null to empty collection early in the chain. If you are coding the method that returns a list, there is no reason it should return null. When dealing with legacy code you have to deal with a null so here are a few options when that occurs:
Just make the null and empty check private void return_empty_list_java_exception () {
DomainObject domain = null ; // dao populate domain
List < String > strings ;
if ( domain != null && domain . getStrings () != null
&& domain . getStrings (). size () > 0 ) {
strings = domain . getStrings ();
} else {
strings = Collections . emptyList ();
}
}
Use Guava Objects.firstNonNull private void return_empty_list_guava_exception () {
DomainObject domain = null ; // dao populate domain
List < String > strings = Objects . firstNonNull (
domain != null ? domain . getStrings () : null ,
ImmutableList .< String > of ());
//...
}
Apache commons ColletionUtils private void return_empty_list_apache_commons_exception () {
DomainObject domain = null ; // dao populate domain
List < String > strings ;
if ( domain != null && ! CollectionUtils . isEmpty ( domain . getStrings ())) {
strings = domain . getStrings ();
} else {
strings = ListUtils . EMPTY_LIST ;
}
//...
}
Return empty list posted by Justin Musgrove on 06 January 2014
Tagged: java and java-collections
Share on: Facebook Google+
All the code on this page is available on github:
ReturnEmptyList.java