cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gianugo Rabellino <gian...@apache.org>
Subject Re: [Kernel2.2] Remove nulls?
Date Wed, 31 Mar 2004 12:34:43 GMT
Pier Fumagalli wrote:

> On 31 Mar 2004, at 11:52, Gianugo Rabellino wrote:
> 
>> I've seen in the new API that in a number of places there are 
>> contracts that return null if something isn't found: since these are 
>> all perfect candidates for nasty NPEs, how about switching to 
>> NullObject pattern or throw Exceptions instead?
> 
> 
> As far as I can see, "null"s are returned only when implementing the 
> collections interfaces (Library, Parameters, Configuration) or when URLs 
> are resolved (Resolver).
> 
> And even there (ex. Configuration and Parameters) when calling a method 
> specifed in the interface, and not inherited from the 
> Set/Map/Collection, it will throw specific exceptions (ex. 
> ConfigurationException).
> 
> Where did you notice it?

Well... there are 10 occurrences, but this are the most prominent:


o.a.c.kernel.configuration.Parameters.java:

   public Object get(Object name) {
         if (name == null) return(null);


o.a.c.kernel.archival.HashLibrary.java:

     public Descriptor get(Identifier identifier) {
         if (this.contains(identifier)) {
             Iterator iterator = this.iterator();
             while (iterator.hasNext()) {
                 Descriptor descriptor = (Descriptor) iterator.next();
                 if (descriptor.equals(identifier)) return(descriptor);
             }
         }
         return(null);
     }

o.a.c.kernel.resolution.CompoundResolver.java:

     public Resource resolve(String name) {
         Resolver r[] = (Resolver[])list.toArray(new Resolver[list.size()]);
         for (int x = 0; x < r.length; x ++) {
             Resource s = r[x].resolve(name);
             if (s != null) return(s);
         }
         return(null);
     }

I haven't been through the code to see what exactly these things do, but 
from a pure OOP POV (whatever that means :-)) there is some "code that 
smells" (http://c2.com/cgi/wiki?CodeSmell). It might make sense, but in 
most cases it doesn't.

Ciao,

-- 
Gianugo Rabellino
Pro-netics s.r.l. -  http://www.pro-netics.com
Orixo, the XML business alliance - http://www.orixo.com
     (Blogging at: http://www.rabellino.it/blog/)

Mime
View raw message