We could always require and impose that the iterator also throw exceptions.
On 1/26/2011 12:20 PM, Steven Bethard (JIRA) wrote: > EventStream should extend Iterator<Event> > ----------------------------------------- > > Key: OPENNLP-99 > URL: https://issues.apache.org/jira/browse/OPENNLP-99 > Project: OpenNLP > Issue Type: New Feature > Components: Maxent > Affects Versions: maxent-3.0.0-sourceforge > Reporter: Steven Bethard > > > [As requested, brought over from Sourceforge.] > > Conceptually, EventStream is just an Iterator<Event>. You would get better > interoperability with other Java libraries if EventStream were declared as > such. If you didn't care about backwards compatibility, I'd say just get rid > of EventStream entirely and use Iterator<Event> everywhere instead. > > If you care about backwards compatibility, you could at least declare > AbstractEventStream as implementing Iterator<Event> - it declares all of > hasNext(), next() and remove(). I believe that shouldn't break anything, and > should make all the current EventStream implementations into Iterator<Event>s. > > Why do I want this? Because, when using OpenNLP maxent from Scala, if a > RealValueFileEventStream were an Iterator<Event>, I could write: > > for (event <- stream) { > ... > } > > But since it's not, I instead have to wrap it in an Iterator: > > val events = new Iterator[Event] { > def hasNext = stream.hasNext > def next = stream.next > } > for (event <- events) { > ... > } > > Or write the while loop version: > > while (stream.hasNext) { > val event = stream.next > ... > } > >
