On 19 May 2015, at 17:13, Daniel Fuchs <daniel.fu...@oracle.com> wrote:

> On 19/05/15 12:07, Paul Sandoz wrote:
>>> Should anything be said also about default remove() method inherited from 
>>> Iterator interface? Are custom asIterator() implementations allowed to 
>>> return an Iterator that implements remove() in a way that actually removes 
>>> elements?
>>> >
>> Since this method transfers control it seems a little mean to place such a 
>> restriction on the returned Iterator. Although, there is no clear means of 
>> stating to the caller whether such an iterator supports removal or not, but 
>> that seems to be generally the case for any Iterator returning method.

+     * @implSpec
+     * The returned Iterator's {@link Iterator#hasNext hasNext} method calls 
and returns
+     * the value from this Enumeration's {@code hasMoreElements} method; its
+     * {@link Iterator#next next} method calls and returns the value from this 
Enumeration's
+     * {@code nextElement} method; and its {@link Iterator#remove remove} 
method throws
+     * {@code UnsupportedOperationException}.
+     *

Why not turn the proposed implSpec into an implNote, and leave it up to other 
API’s returning Enumerations to specify their behaviour of asIterator, if they 
override the default.

-Chris.

> 
> Ah... Interesting use case. I hadn't thought of that.
> 
> What should ConcurrentHashMap.keys().asIterator().remove() do?
> 
> cheers,
> 
> -- daniel

Reply via email to