RFR(s): 8072726: add adapter to convert Enumeration to Iterator

Claes Redestad claes.redestad at oracle.com
Sat May 16 22:46:39 UTC 2015


On 2015-05-16 23:48, Remi Forax wrote:
>
>
> On 05/16/2015 06:21 PM, Claes Redestad wrote:
>> Hi,
>>
>> any reason not to just have Enumeration extend Iterable and 
>> default-implement iterator()?
>>
>> http://cr.openjdk.java.net/~redestad/scratch/enumerable.00/
>>
>> I guess there are compatibility risks I haven't thought through 
>> completely, but I
>> think concrete classes that already implement both Enumeration and 
>> Iterable should
>> continue to work as expected (since the concrete class' 
>> implementation of
>> iterator always takes precedence), no?
>
> Hi Claes,
>
> yes, but there is an issue for code that uses instanceof to do 
> something different if the object is an Enumeration or if the object 
> is an Iterable.

Hi Rémi,

I guess that's a possibility.

>
> You can only retrofit an existing class/interface to 
> implements/extends an interface/class in a compatible way only if the 
> interface/class is newly introduced in the release by example 
> retrofitting Closeable to implement AutoCloseable is Ok in 1.7 because 
> AutoCloseable was introduced in 1.7.

Probably due to introducing ambiguity in overload selection, come to 
think of it.

I also realized Iterable should typically allow multiple passes over the
collection/enumeration, so this wouldn't feel right. Sorry!

So... I'm happy with Stuart's proposal.

I would also be happy (happier?) with a stream variant: 
pc.elements().stream().forEach(this::doSomethingWithPermission);

> and remember, prefer composition to inheritance :)

*ducks* :)

/Claes

>
>>
>> /Claes
>
> Rémi
>
>>
>> On 2015-05-16 02:37, Stuart Marks wrote:
>>> Hi all,
>>>
>>> Please review this small API enhancement to add a default method 
>>> "asIterator()" to Enumeration that converts it into an Iterator.
>>>
>>> Webrev:
>>>
>>> http://cr.openjdk.java.net/~smarks/reviews/8072726/webrev.0/
>>>
>>> Bug:
>>>
>>>     https://bugs.openjdk.java.net/browse/JDK-8072726
>>>
>>> Thanks,
>>>
>>> s'marks
>>
>




More information about the core-libs-dev mailing list