Я думаю, что проблема связана с тем, что Groovy превращает конструктор во что-то другое, пытаясь скомпилировать его как класс Java. Возможно, определение закрытия расширено до вызова super
, порождающего эту ошибку.
Обходной путь - определить замыкание вне самого конструктора:
class Base {
def c
Base(c) {this.c = c}
void callMyClosure() {
c()
}
}
class Upper extends Base {
static cc = {println 'called'}
Upper() {
super(cc)
}
}
u = new Upper()
u.callMyClosure()
Это не так хорошо, но, по крайней мере, это работает ... другим способом может быть определение замыкания с использованием обычного new Closure(...)
синтаксиса