Проблема с оператором ссылки на метод и CompileStatic
В следующем коде@CompileStatic
не работает в сочетании с оператором ссылки на метод для методов Groovycollect
иfind
, хотя он работает с потоками Java или оператором указателя метода . Я делаю что-то не так или это не поддерживается?
Код не компилируется с использованием Java 17 и Groovy 4.0.15.
import groovy.transform.CompileStatic
@CompileStatic
private void groovyFuncWithMethodPointer(int n) {
// works
def res = (1..n).collect(this.&calc)
.find(this.&isEven)
}
@CompileStatic
private void groovyFuncWithMethodReference(int n) {
// does not work
// org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
// ideaGroovyConsole.groovy: 15: The argument is a method reference, but the parameter type is not a functional interface
def res = (1..n).collect(this::calc)
.find(this::isEven)
}
@CompileStatic
private void streamFuncWithMethodReference(int n) {
// works
def res = (1..n).stream()
.map(this::calc)
.filter(this::isEven)
.findFirst()
}
int calc(int x){
return 2*x+1
}
boolean isEven(int x){
return x % 2 == 0
}