Groovyの初心者として...
イベントリスナー、フィルターなどの Java イディオムを置き換えようとしています。
groovy での私の作業コードは次のとおりです。
def find() {
ODB odb = ODBFactory.open(files.nodupes); // data nucleus object database
Objects<Prospect> src = odb.getObjects(new QProspect());
src.each { println it };
odb.close();
}
class QProspect extends SimpleNativeQuery {
public boolean match(Prospect p) {
if (p.url) {
return p.url.endsWith(".biz");
}
return false;
}
}
これは、ODB.getObjects() メソッド内で Query インターフェースの実装が行われる Java で慣れ親しんだものとはかけ離れています。「Java」をコーディングする場所があれば、おそらく次のようなことをするでしょうが、まだ機能していません。
Objects<Prospect> src = odb.getObjects( {
boolean match(p) {
if (p.url) {
return p.url.endsWith(".biz");
}
return false;
}
} as SimpleNativeQuery);
または、次のようにしたいと思います。
Objects<Prospect> src = odb.getObjects(
{ it.url.endsWith(".biz") } as SimpleNativeQuery
);
ただし、「一致」メソッドを外側のスクリプトコンテキストに関連付けて失敗させるために、Groovyが行うことは何ですか。
私はグルーヴィーだと思います...とにかくグルーヴィーなので、それについてもっと学ぶことに固執します。ありがとう。
私が尋ねるべきだったのは、groovy で「匿名」クラスをどのように行うかということでした。Java のイディオムは次のとおりです。
void defReadAFile() {
File[] files = new File(".").listFiles(new FileFilter() {
public boolean accept(File file) {
return file.getPath().endsWith(".biz");
}
});
}
追加のクラス宣言なしで groovy を簡潔にできますか?