== Why is this an issue?

The ``++hasNext++`` method of an ``++Iterator++`` should only report on the state of the iterator, not change it. Making a change to an iterator in its ``++hasNext++`` method violates all expectations of what the method will do, and almost guarantees bad results when the iterator class is used.


=== Noncompliant code example

[source,java]
----
public class MyItr implements Iterator<MyClass> {
  //...

  public boolean hasNext() {
    if (next() != null) {  // Noncompliant
      return true;
    }
    return false;
  }
----


=== Compliant solution

[source,java]
----
public class MyItr implements Iterator<MyClass> {
  private List<MyClass> list;
  private int index = 0;

  //...

  public boolean hasNext() {
    return index < list.size();
  }
----


ifdef::env-github,rspecator-view[]
'''
== Comments And Links
(visible only on this page)

=== duplicates: S1849

=== on 10 Oct 2014, 15:30:37 Freddy Mallet wrote:
I would prefer the following rule title @Ann: 

* "Iterator.next()" method should never be called in the "Iterator.hasNext()" method

endif::env-github,rspecator-view[]
