[Fwd: Code review request: 7072353 JNDI libraries do not build with javac -Xlint:all -Werror]
Colin Decker
cgdecker at gmail.com
Thu Aug 4 16:17:16 UTC 2011
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
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/security-dev/attachments/20110804/d06c644c/attachment.htm>
More information about the security-dev
mailing list