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?
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()