Как плохо знакомый с 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, чтобы связать метод «match» с внешним контекстом скрипта и потерпеть неудачу?
Я нахожу отличную ... отличную, в любом случае, так что я буду больше узнавать об этом. Спасибо.
Что я должен был спросить, так это как мы проводим «анонимный» класс в классном стиле. Вот идиома Java:
void defReadAFile() {
File[] files = new File(".").listFiles(new FileFilter() {
public boolean accept(File file) {
return file.getPath().endsWith(".biz");
}
});
}
Может ли groovy быть кратким без дополнительного объявления класса?