のJava 5以来、私たちのようなforeach文で使用できる新しいjava.lang.Iterable
タイプがあります。複数の使用法に関するIterableインタフェースの公式契約はありますか?
for (Object element : iterable);
反復処理可能の処分の前にそのiterator()
メソッドが複数回呼び出すことができるかどうかを指定していないIterable
契約。
for (Object element : iterable);
for (Object element : iterable);
は、例えば、Iterator
ラッピングの実装は2回使用することはできません:
ほとんどの場合Iterables
が、これはすなわち、次のようにすべてのIterables
のために働くことが期待できるかどうかは明らかではありませんこれは実際にはList
,Set
のようなコレクションAPIの型にあてはまり、すでにiterator()
メソッドの定義済みのコントラクトを持っているため、無関係です。
私のOneShotIterable
実装は、私が見落としている契約に違反していますか?言い換えれば、のユーザーはそれを再利用できると期待していますか?もしそうなら、Java 5の専門家グループが「ワンショット」Iterables
(2回目の呼び出しでIllegalStateException
を投げるなど)に対処する方法を「公式」に勧告していますか?
+1 utterable – TheBlastOne
iterator()が呼び出されるたびにOneShotIterableのフィールドを増やすことはできませんでしたか?それがgte nの場合は例外をスローしますか? – sp00m
@LukasEder dohあなたはそれを編集しました – TheBlastOne