I don't think we should commit to a single class doing both Iterable and Iterator. An Iterable is already committed to being able to supply an Iterator on demand, but often the Iterator implementation is better done as a private class member of the Iterable. Note that an Iterable needs to be able to supply a new Iterator each time its iterator() method is called.

I'm not sure what you are saying about combining Iterator and the MatchSet features. My inclination would be to keep each interface simple and clean. Many classes will implement Iterable and appropriate interfaces representing the snapshot and lease capabilities.

As you can probably guess from the length of this reply, I'm back from Egypt and have a full keyboard, not just an iPhone.

Patricia


James Grahn wrote:
I should also add, we'd likely need to derive our own class extending Iterable & Iterator to avoid losing existing MatchSet methods of getSnapshot and getLease.

I don't see an immediate problem with this; a collection-backed Iterable/Iterator would always have a null Lease, correct?

jamesG

On 1/18/2011 5:38 PM, James Grahn wrote:
It (finally) occurred to me that we can have our cake and eat it too in
this case.

We can have the sweet deliciousness of API symmetry and retain the
implementation advantages of remote iterator & collection by having both
take-multiple and contents return:
Iterable.

This would introduce more flexibility in the spec, allowing more design
decisions to be made by those implementing, while presenting a uniform
external return type to the users. (A relatively standard one at that.)

When I was looking at the remote iterator earlier, I was thinking it
would probably be best to have it implement Iterator and probably
Iterable anyway.

The only potential sour note is that Iterable is a 1.5 interface. So
that's come up again.

jamesG



Reply via email to