cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Carsten Ziegeler <cziege...@apache.org>
Subject Re: Problematical implementation of Iterator API ?
Date Sat, 03 Nov 2007 18:36:52 GMT
Felix Knecht wrote:
> Hi all
> 
> I have found at different locations [1] an implementation (more or less similar) for
an EmptyIterator, e.g.
> 
> static class EmptyIterator implements Iterator {
>     public boolean hasNext() { return false; }
>     public Object next() { return null; }
>     public void remove() {}
> }
> 
> Many of them are lacking the same problem:
> Iterator next() [2] method says to throws an exception when there are no more elements
to return (what would be the case
> here). In fact null is returned instead of an error.
> 
> Is this done this way on purpose?
No, it's a mistake - I never read the java docs correctly :(
So it should throw an exception.

Carsten
> 
> Implementing in a way like
> static class EmptyIterator implements Iterator {
>     public boolean hasNext() { return false; }
>     public Object next() { throw new NoSuchElementException(); }
>     public void remove() {}
> }
> 
> will at least make testJXForEach(org.apache.cocoon.template.jxtg.JXTemplateGeneratorTestCase)
failing.
> It's (ForEach) implementation of the EmtpyIter looks even less logical
> 
> protected static final Iterator NULL_ITER = new Iterator() {
>     public boolean hasNext() {
>         return true;
>     }
>     public Object next() {
>         return null;
>     }
>     public void remove() {
>         // EMPTY
>     }
> };
> 
> Why does a NULL_ITER returns 'true' when calling hasNext()?
> 
> Maybe Carsten (commit 568847) or Grzegorz can have/give some more information?
> 
> Felix
> 
> 
> [1] org.apache.cocoon.components.source.impl.BlobSource
>     org.apache.cocoon.el.impl.AbstractExpression
>     org.apache.cocoon.template.expression.JXTExpression
>     org.apache.cocoon.template.instruction.ForEach
> 
> [2] http://java.sun.com/j2se/1.4.2/docs/api/java/util/Iterator.html#next()
>     http://java.sun.com/j2se/1.5.0/docs/api/java/util/Iterator.html#next()
> 


-- 
Carsten Ziegeler
cziegeler@apache.org

Mime
View raw message