Oh, I'm sorry, I was not paying enough attention.
By declaring your iterator class as
CircularIterator<E>, you're introducing a new type parameter
E, which, though it has the same name, has no relation to the type parameter
E of the outer class. So the solution is to simply not declare the parameter in the
CircularIterator class definition; that way the
E (which is valid throughout the source code, including any inner classes) will be the
E of the outer class.
You might want to try to take a look at the
LinkedList source, to see how it is handled there.