作为 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;
}
}
现在,这与我在 java 中的习惯相去甚远,其中 Query 接口的实现是在 odb.getObjects() 方法中完成的。如果我在哪里编写“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... groovy 反正我会坚持学习更多。谢谢。
我应该问的是我们如何在 groovy 中做“匿名”类。这是java的成语:
void defReadAFile() {
File[] files = new File(".").listFiles(new FileFilter() {
public boolean accept(File file) {
return file.getPath().endsWith(".biz");
}
});
}
groovy 可以在没有额外的类声明的情况下如此简洁吗?