Example

public NullIterator_Exemplo() {
super();
}

public void addValue( Integer value ) {
if ( values == null ) {
values = new ArrayList(10);
}
values.add( value );
}

public Iterator getValues() {
if ( values == null ) {
return null;
}
return values.iterator();
}

private List values;

public static void main( String[] args ) {
NullIterator_Exemplo example = new NullIterator_Exemplo();
for ( Iterator iter = example.getValues(); iter.hasNext(); ) {
System.out.println( iter.next() );
}
}

Solução
Retorne um Agente Iterativo vazio em vez de nulo.

public NullIterator_Solution() {
super();
}

public void addValue( Integer value ) {
if ( values == null ) {
values = new ArrayList(10);
}
values.add( value );
}

public Iterator getValues() {
return ( values != null ) ? values.iterator() :
new Iterator() {
public boolean hasNext() {
return false;
}
public Object next() {
throw new UnsupportedOperationException();
}
public void remove() {
throw new UnsupportedOperationException();
}
};
}


private List values;

public static void main( String[] args ) {
NullIterator_Exemplo example = new NullIterator_Exemplo();
for ( Iterator iter = example.getValues(); iter.hasNext(); ) {
System.out.println( iter.next() );
}
}