Re: [Fwd: Code review request: 7072353 JNDI libraries do not build with javac -Xlint:all -Werror]
Sebastian Sickelmann
sebastian.sickelmann at gmx.de
Fri Aug 5 11:18:35 UTC 2011
I like that idea. Should we open another discussion thread?
Colin Decker <cgdecker at gmail.com> schrieb:
>One better way to handle this in Java 8 would be to have a utility method
>that takes a Supplier<Enumeration<E>> SAM argument (with a no-arg method
>that returns an Enumeration<E>) and returns an Iterable<E> that gets a new
>Enumeration from the supplier each time iterator() is called. It could then
>be used with method references:
>
>Iterable<E> iterable = Util.enumerationIterable(#object.getEnumeration);
>
>--
>Colin
>
>
>On Wed, Aug 3, 2011 at 5:14 PM, Alexandre Boulgakov <
>alexandre.boulgakov at oracle.com> wrote:
>
>> Users of Iterable expect to call Iterable.iterator() multiple times,
>> receiving a fresh iterator pointing to the beginning of the Iterable each
>> time. This would not be possible to do with an Enumeration wrapper since
>> Enumerations are read-once.
>>
>> I don't know if this is a strong enough reason not to include such a
>> utility class, but it could certainly be confusing.
>>
>> -Sasha
>>
>>
>> On 8/3/2011 2:09 PM, Neil Richards wrote:
>>
>>> On Wed, 2011-08-03 at 11:03 -0700, Alexandre Boulgakov wrote:
>>>
>>>> Please see my responses inline.
>>>>
>>>> Thanks!
>>>> -Sasha
>>>>
>>>> On 8/2/2011 9:13 PM, Xuelei Fan wrote:
>>>>
>>>>> . com/sun/jndi/toolkit/dir/**SearchFilter.java
>>>>> 451 for (NamingEnumeration<?> ve = attr.getAll();
>>>>> 452 ve.hasMore();
>>>>> 453 ) {
>>>>>
>>>>> The update is OK. But the coding style looks uncomfortable. Would you
>>>>> mind change it to use for-each style?
>>>>>
>>>> For-each only works with Iterables. There doesn't seem to be a way to
>>>> get an Iterable out of an Attribute instance, so the only way to use a
>>>> for-each here would be to wrap the Enumeration in an ArrayList using
>>>> Collections.list(). While this might look neater, the contents of the
>>>> Enumeration would have to be copied over, using time and increasing the
>>>> memory footprint. Changing Attribute to implement Iterable would require
>>>> a spec change, and would be beyond the scope of this fix.
>>>>
>>> Would it be useful to have a utility object to convert an Enumeration
>>> so it can be used in for-each constructs? - something like:
>>> ----
>>> import java.util.Enumeration;
>>> import java.util.Iterator;
>>>
>>> /**
>>> * Utility class to transform an Enumeration object such that it
>>> can be used in
>>> * the for-each construct.
>>> */
>>> public class IterableEnumerationHolder<E> implements Iterable<E>,
>>> Iterator<E> {
>>> private final Enumeration<E> e;
>>>
>>> public IterableEnumerationHolder(**final Enumeration<E> e) {
>>> this.e = e;
>>> }
>>>
>>> @Override
>>> public Iterator<E> iterator() {
>>> return this;
>>> }
>>>
>>> @Override
>>> public boolean hasNext() {
>>> return e.hasMoreElements();
>>> }
>>>
>>> @Override
>>> public E next() {
>>> return e.nextElement();
>>> }
>>>
>>> @Override
>>> public void remove() {
>>> throw new UnsupportedOperationException(**);
>>> }
>>> }
>>> ----
>>>
>>> If it would, perhaps it might be considered for Java 8?
>>>
>>> Regards,
>>> Neil
>>>
>>>
--
Diese Nachricht wurde von meinem Android Mobiltelefon mit GMX Mail gesendet.
More information about the core-libs-dev
mailing list