commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Michael A. Smith" <>
Subject Re: [lang] NullArgumentException?
Date Sat, 29 Jun 2002 21:42:58 GMT
On Sat, 29 Jun 2002, Stephen Colebourne wrote:
> From: "Michael A. Smith" <>
> > On Sat, 29 Jun 2002, Stephen Colebourne wrote:
> > > I would like to add a NullArgumentException class to the lang.exceptions
> > > package.
> > >
> > > It would be a subclass of IllegalArgumentException.
> > > It would be thrown when null is passed in as an argument when it
> shouldn't
> > > be.
> > >
> > > Any objections?
> >
> > That's what java.lang.NullPointerException is for.  "Applications should
> > throw instances of this class to indicate other illegal uses of the null
> > object."
> 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?

> 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."

> 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).


To unsubscribe, e-mail:   <>
For additional commands, e-mail: <>

View raw message