As I started to mention in another blog post, your Java code will be more flexible when you learn to return more-general object references. In most cases other developers only need to see your interface, not your implementation. Put another way, does it matter to anyone else if you used a LinkedList or an ArrayList? If it doesn't matter, then return a List, or perhaps even a Collection.
As a specific example, a Java method that returns a LinkedList or ArrayList will be more flexible if it returns a more-general reference, such as a List, or better yet, a Collection. Here's an example of a method that returns a LinkedList:
// before: method returns a LinkedList reference
private LinkedList getList()
{
LinkedList list = new LinkedList();
list.add("Hello");
list.add("world");
return list;
}
That code is too-specific. At least 99% of the time other developers don't need to know that you're really creating a LinkedList. You're much better off returning just a plain old List, or better yet, a Collection, like this:
// after: method returns a Collection reference
private Collection getList()
{
Collection list = new LinkedList();
list.add("Hello");
list.add("world");
return list;
}
The reference you return should really depend on the functionality you want to support. Because a LinkedList implements a List, and a List has a Collection as an interface, you really need to know what methods those interfaces support to make this decision. But it's worth taking a moment to learn them, and to then keep your code more general (again, interface versus implementation details).

