Is there any official contract for the Iterable interface with respect to multiple usage?

天涯浪子 提交于 2019-12-03 06:12:40

One precedent that I could find in the standard library is the DirectoryStream interface.

Its Javadoc contains the following passage (emphasis theirs):

While DirectoryStream extends Iterable, it is not a general-purpose Iterable as it supports only a single Iterator; invoking the iterator method to obtain a second or subsequent iterator throws IllegalStateException.

To me, this suggests two things:

  • The implied contract on Iterable is that you're supposed to be able to iterate more than once (perhaps even concurrently!)
  • A boldface warning in the documentation coupled with throwing IllegalStateException is probably the best way to handle non-compliance in your own classes/interfaces.

Not really an answer to my question, but Apache Commons Collections has addressed this issue in its IteratorUtils class:

Both are factory methods for the IteratorIterable type. The above distinction makes it clear that one must take care when wrapping Iterators in Iterables.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!