2015-01-07 12:22 GMT+01:00 Stanislav Baiduzhyi <sbaid...@redhat.com>: > On Wednesday 07 January 2015 11:20:57 you wrote: >> On 07/01/15 10:57, Stanislav Baiduzhyi wrote: >> > On Wednesday 07 January 2015 10:56:01 Chris Hegarty wrote: >> >> public boolean hasNext() { >> >> >> >> - return cursor != size; >> >> + return cursor != itrSize; >> >> >> >> } >> > >> > If the user will invoke list.remove(E) to remove current or previous >> > element then iterator will be skipping some elements. >> >> If this happens, then next() and/or remove() will throw CME. >> >> Throwing ConcurrentModification >> >> > in hasNext() looks better in such case. >> >> It is not clear to me that users would be expecting CME from hasNext(), >> whereas it is more next() and remove() is more obvious. > > Yes, but that exactly how it works now, that's why second invocation of > hasNext() returns false and we can see the issue Remi is talking about. If > hasNext() will be throwing ConcurrentModification than will work as early > warning system that something is wrong with this iterator.
But hasNext isn't modifying things, why should it throw ConcurrentModification? I would find it very confusing, and also likely non backward compatible. Cheers, Mario -- pgp key: http://subkeys.pgp.net/ PGP Key ID: 80F240CF Fingerprint: BA39 9666 94EC 8B73 27FA FC7C 4086 63E3 80F2 40CF Java Champion - Blog: http://neugens.wordpress.com - Twitter: @neugens Proud GNU Classpath developer: http://www.classpath.org/ OpenJDK: http://openjdk.java.net/projects/caciocavallo/ Please, support open standards: http://endsoftpatents.org/