[prev in list] [next in list] [prev in thread] [next in thread] 

List:       jakarta-commons-dev
Subject:    Re: [lang] NullArgumentException?
From:       "Stephen Colebourne" <scolebourne () btopenworld ! com>
Date:       2002-06-29 22:07:21
[Download RAW message or body]

> > I have to reasons for not wanting to use NullPointerException.
> > 1) NullPointerException is an unplanned exception. Its thrown by the
runtime
> > automatically, with no control over the error message. Overloading its
use
> > for specifically validated exceptions is not good.
>
> if(foo == null) {
>   throw new NullPointerException("foo was null");
> }
>
> works fine for me.  I don't see why that's not good.  If it wasn't don't
> you think they would have left off the constructor that took a String
> for the message?

To me, the very name says it all - null *pointer*, not illegal *argument*.

> > 2) The Collection API doesn't allow NullPointerException to be thrown
for a
> > rejection of null entry into a collection. It states it must be
> > IllegalArgumentException.
>
> Collection class documentation:
>
> "Attempting to add an ineligible element throws an unchecked exception,
> typically NullPointerException or ClassCastException."
>
> Collection.add(Object) documentation:
> "NullPointerException - if the specified element is null and this
> collection does not support null elements."

I had check the javadoc too and it wasn't there. I've checked again, and it
was added in J2SE 1.4

> > In both cases NullArgumentException would make life clearer.
>
> I disagree.  It makes distinguishing between two different types of
> exceptional conditions a bit more difficult.  There is frequently a
> difference between passing in a Null and passing in an illegal argument
> and thus two different exceptions should be used (i.e. they shouldn't
> inherit from each other).  If you only want to catch the
> IllegalArgumentException case and let a null based exception propogate
> up the stack, it's not pretty if you have NullArgumentException extend
> IllegalArgumentException.  You'd have to catch the exception, test with
> instanceof and rethrow).

You don't actually need to test for instanceof, an earlier catch clause and
rethrow would do. The point of my argument is that null is an illegal
argument in this case, so should be treated the same way as other illegal
args are. Getting to the stage of having a method call on a null reference
is one stage worse, and that should thus have its own exception, the
appropriately named null pointer.

However, it seems Sun have decided against me. I disagree with that. But
I'll have to live with it :-(

Stephen




--
To unsubscribe, e-mail:   <mailto:commons-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:commons-dev-help@jakarta.apache.org>

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic