Проблема с оператором ссылки на метод и 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
}

0 ответов

Другие вопросы по тегам