Wednesday, August 20, 2008

From the "things I wish Java had" file...

Often you'll find yourself writing code similar to the following:
String childName = root.getChild().getName();
Now, if root.getChild() returns null, you'll get a dreaded NullPointerException. There are a couple ways to guard against this of course, but they're fairly verbose. You could check each traversal point for null...
String childName = null;
Node child = root.getChild();
if (child != null) {
childName = child.getName();
That works, but it gets messy quickly if you have another traversal or two (and yes, I know, excessive depth is a bad code smell).

Alternatively, you could do something like this:
String childName = null;
try {
childName = root.getChild().getName();
} catch(NullPointerException ignored) {
But you could really end up littering your code with ignored catch blocks.

Ideally, I would love to have a method of saying "traverse as far as you can, but return null if you encounter null along the way". Perhaps a special operator?
String childName = root,getChild(),getName();
Anyway, I'm sure there are languages out there that support this notion. It's high on my list of desired features for an alternative to Java!


Unknown said...

Check Groovy safe navigation idiom, you will love it.

I tend to use Groovy scripts now for this kind of unsafe operations: since Java6 it is now so easy to access scripting from a standard Java application.

Carl Schmidt said...

That's exactly what I want, thanks! I've gotten so behind on things, am definitely looking forward to catching up...

Anonymous said...

Old blog, I know, but you could always write a wrapper for that behavior. It's not optimal either, but it would be the least cutterful way of doing it.

I just wish there was a destructor in Java. There's a lot of things destructors can do other than releasing memory :(

Freya said...

The word 'Idioms', in this context, should be taken to mean something like 'Common Practice'. This page isn't an appropriate place to put patterns, it's a place to put example of common solutions to java coding problems. If the Idiom linked to off this page has no code, then its a pattern. If its about using a related group of classes to solve a design problem, then it is a pattern too.