I was pointed to some comments on core-libs about adapting Enumerations to for 
loops in SE 8.  (Sorry for the new thread -- I wasn't subscribed.)  It turns 
out lambdas + extension methods will make this very easy.

In the API:

interface Enumeration<E> extends Iterator<E> {
  boolean hasMoreElements();
  E nextElement();
  boolean hasNext() default #hasMoreElements;
  E next() default #nextElement;
  void remove() default { throw new UnsupportedOperationException(); }
}

Note that Iterable is a function type -- a thunk producing an Iterator -- and 
so we can express Iterables with lambdas and method references.  It's becoming 
clear that a for loop should provide a target type for these things, so that 
will probably be part of the SE 8 feature set.

With a method reference:

Hashtable<String,Object> h = …;
for (String s : h#keys) { … }

With a lambda:

for (String s : #{ -> path().to().enumeration() }) { ... }

My preference is to also support Iterators directly in for loops; this may or 
may not make it in:

for (String s : path().to().enumeration()) { ... }

—Dan

Reply via email to