2013-02-21 7 views
5

私はGroovyに恋し、ますます使いこなそうとしています。 Oracle Forms Jdapiライブラリで作業する必要があります。このライブラリで作業する場合、あなたはこのようなコードをたくさん書く:Javaライブラリ "Groovy"を作成する

JdapiIterator progIterator = getWorkForm().getProgramUnits(); 
while(progIterator.hasNext()) { 
    ProgramUnit currProgUnit = (ProgramUnit) progIterator.next(); 
    ... 
} 

と讲义1コースのを私は

getWorkForm().programUnits.each { 
    ... 
} 

を書きたいしかし、私は、既存のJavaライブラリへのGroovyインターフェースを書いたことはありませんいくつかの支援が必要です。私はGroovy 2.0's extension methodsについて知っていますが、その場合は別の名前空間に同じ名前のクラスについて考えていますが、これは私が保持したい機能にのみ委任します。

each機能を提供するための最良の方法は何ですか?また、コレクションに適用できる他のすべてのクロージャもありますか?あなたが私を正しい方向に向けると、私は感謝しています!

+7

'getWorkForm()。programUnits.each {ProgramUnit currProgUnit - > ...}'はすでに書けませんか?どのようなエラーが出ますか? –

+3

ええ、私はいつもこのようなことをしています。上記のコードは期待どおりに動作するはずです。いくつかのヘルパーメソッドを追加しない限り、インターフェースラッパーを書く必要はありません。 –

+0

ありがとう、受け入れられた回答のコメントを参照してください。 – ChrLipp

答えて

6

提供する必要がある唯一の方法はiterator()メソッドです。 Groovy Objectの反復メソッド(each()find()any()every()collect()、...)を無料で入手できます。

+0

イテレータで 'each'を使うことができると思っていました。イテレータとして' 0.with {x - >([hasNext:{x <10}、次に:{x ++}}} .each {println it}} ' –

+0

私はこの機能を認識していませんでした。掘り下げた後、java.lang.Classの実装(少なくともGroovy JDKのdokuで)が見つかりました。私はもっ​​と多くを実装する必要があると思った! – ChrLipp

関連する問題