[jdom-interest] NoSuch*Exceptions in JDOM
Jools Enticknap
jools at jools.org
Mon Jun 19 06:05:19 PDT 2000
On Sun, 18 Jun 2000, Jason Hunter wrote:
> You know, I was halfway into proposing such a method when I stopped to
> give it some more thought. It lets you write code
>
> if (elt.hasChild("foo")) {
> Element child = elt.getChild("foo");
> }
> else {
> // deal with none
> }
>
> which is debatably better to read. The reason I wanted to think more
> about it was that hasChild() would have to do an O(n) scan through the
> children, then getChild() would have to do the same scan. Course, we
> could cache the hasChild() child trusting the user is pretty likely to
> call getChild() if it returns true, but that's another piece of memory
> every Element will have to hold.
During my initial thought, prior to writing my initial post I wondered
about this, but after refreshing myself with the code I realized that in
the success case it would be 2 O(n) scans through the children which I
thought was a bit heavy, although caching would resolve that as long as
no add/delete/has Child calls to another Element name were made prior to
getChild being called.
But to me this all seems like a large hammer on a small nail, lets take
the above example and nullify it.
Element e = elem.getChild("foo");
if ( e != null ) {
// Do something with e
}
else {
// Do something else.
}
Looks like it does the same, but with much less overhead.
Don't get me wrong, I'm not shooting the hasChild() call down, I think
it's a good idea, and I like the ability to check on the presence of a
child before I try to get it, it's just that I think if we want to make it
efficient caching is required, much like what has been done with
getContent().
But it all adds weight to what is a nicely lightweight XML implementation
which already does what is required.
<suggestion>
1) Drop the NoSuch*Exceptions.
2) Return nulls, when the 'thing' you were looking for is not there.
3) Add the hasChild() call for those who don't want to check for null, but
add a JavaDoc comment stating the overhead of using this instead of
null.
Adding the hasChild is a no-brainer, gets rid of the Exception and
returning null helps the CPU restricted people get the job done quicker
:-)
</suggestion>
--Jools (who's now off the fence)
More information about the jdom-interest
mailing list