GoogleコレクションライブラリAbstractIteratorを使用してジェネレーターを実装しています。そうしているときに問題に遭遇しました。より基本的なタイプに減らして、問題を再現しました。Iterableを介して1からnumelementsまで数えると、この削減は明らかにやり過ぎです。
基本的に、次のコードでは、コメントされていないバージョンは機能しますが、コメントされたバージョンは機能しません(最後の番号で終わるのではなく、最後にnull要素を提供します)。
私は何か間違ったことをしていますか、それともこれはライブラリの問題ですか?
private Iterable<Integer> elementGenerator(final int numelements) {
return new Iterable<Integer>() {
@Override public Iterator<Integer> iterator() {
return new AbstractIterator<Integer>(){
int localcount=0;
@Override protected Integer computeNext() {
if (localcount++ == numelements) return endOfData();
return localcount;
// return (localcount++ == numelements) ? endOfData() : localcount;
}
};
}
};
}
私はまた、アレンジメントをいじってみました?:
(たとえば、リターンの前に付けて、代わりに+1と比較しました)、無駄になりました。これに関するドキュメントを少し探しましたが、何も見つかりませんでした。明らかに、?:
構文は便利であり、必要ではありませんが、それでも...