Подтвердить что ты не робот

Lambda вызывает ошибку компиляции "несовместимые типы" в Java 9, компилируется в Java 8

Следующий код компилируется с Java 8, но не с Java 9: ​​

public class CompileErrJdk9 {

    @FunctionalInterface public interface Closure<R> {
        R apply();
    }

    @FunctionalInterface public interface VoidClosure {
        void apply();
    }

    static <R> R call(Closure<R> closure) {
        return closure.apply();
    }

    static void call(VoidClosure closure) {
        call(() -> { closure.apply(); return null; });
    }

    static <T> void myMethod(T data) {
        System.out.println(data);
    }

    public static void main(String[] args) {
        call(() -> myMethod("hello")); //compile error in jdk9
    }
}

Это ошибка:

CompileErrJdk9.java:24: error: incompatible types: inference variable R has incompatible bounds
        call(() -> myMethod("hello")); //compile error in jdk9
            ^
    upper bounds: Object
    lower bounds: void
  where R is a type-variable:
    R extends Object declared in method <R>call(Closure<R>)
1 error

Я сузил его до параметра типа <T> myMethod; если я его сброшу и использую Object для типа параметра, который компилирует код. Объявление myMethod как static <T> void myMethod() { } также не выполняется (только в 9), хотя я не использую параметр типа.

Я проверил заметки о выпуске Java 9 и искал объяснение этого поведения, но ничего не нашел. Правильно ли я предполагаю, что это ошибка в JDK9, или я чего-то не хватает?

4b9b3361