114

Java自体には直接同等のものがないことは知っていますが、おそらくサードパーティですか?

本当に便利です。現在、ツリー内のすべてのノードを生成する反復子を実装したいと考えています。これは、yield を使用した約 5 行のコードです。

4

6 に答える 6

2

ここでは非常に古い質問であることを知っています。上記の2つの方法があります。

  • 移植中はそれほど簡単ではないバイトコード操作。
  • yield明らかにリソースコストがかかるスレッドベース。

ただし、Java でジェネレーターを実装する 3 番目の、おそらく最も自然な別の方法があります。yieldこれは、C# 2.0+ コンパイラーがyield return/break生成のために行う方法に最も近い実装です: lombok-pg。これは完全にステート マシンに基づいておりjavac、ソース コード AST を操作するには との緊密な協力が必要です。残念ながら、lombok-pg のサポートは中止されたようで (1 年か 2 年以上リポジトリ活動がありません)、元のProject Lombokには残念ながらこのyield機能がありません (ただし、Eclipse のような優れた IDE と IntelliJ IDEA のサポートがあります)。

于 2014-03-11T08:33:04.710 に答える