由於Java 5,我們有新的java.lang.Iterable
類型,可以在foreach循環就這樣使用:關於多次使用,是否有Iterable接口的正式合同?
for (Object element : iterable);
的Iterable
合同沒有具體的可迭代的處理之前其iterator()
方法是否可以調用一次以上。也就是說,目前尚不清楚下面是否可以預期到的所有Iterables
工作:
for (Object element : iterable);
for (Object element : iterable);
例如,一個Iterator
包裝實現不能用兩次:
對於大多數Iterables
,這是無關緊要,因爲它們實際上是改裝後的Collection API類型,例如List
,Set
,它們已經爲其iterator()
方法定義了明確的合同。
我的問題是:我的OneShotIterable
實施違反了一些我忽略的合同嗎?換句話說,Iterable
的用戶會期望它是可重用的嗎?如果有,是否有Java 5專家組的「官方」建議如何處理這種「一次性」Iterables
(例如,在第二次調用時拋出IllegalStateException
)?
+1用於朗讀 – TheBlastOne
難道你不是每次迭代器()被調用就增加一個OneShotIterable的字段,並且拋出一個異常,如果它是gte n? – sp00m
@LukasEder你把它編輯掉了 – TheBlastOne