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

Выполнение Java 8 lambdas

Как я могу сделать что-то подобное в Java 8?

boolean x = ((boolean p)->{return p;}).apply(true);

Сейчас я получаю следующую ошибку:

Целевой тип этого выражения должен быть функциональным интерфейсом

4b9b3361

Ответ 1

В соответствии с JLS раздел 15.27:

Это ошибка времени компиляции, если выражение lambda возникает в программе в некотором месте, отличном от контекста назначения (§5.2), контекста вызова (§5.3) или контекста каста (§5.5).

Также возможно использовать лямбда-выражение в выражении return.

Затем мы можем переписать ваш пример четырьмя различными способами:

  • Создав контекст назначения:

    Function<Boolean, Boolean> function = p -> p;
    boolean x = function.apply(true);
    
  • Создавая контекст вызова:

    foobar(p -> p);
    
    private static void foobar(Function<Boolean, Boolean> function) {
        boolean x = function.apply(true);
    }
    
  • Создав контекст кастинга:

    boolean x = ((Function<Boolean, Boolean>) p -> p).apply(true);
    
  • Используя оператор return:

    boolean x = function().apply(true);
    
    private static Function<Boolean, Boolean> function() {
        return p -> p;
    }
    

Кроме того, в этом простом примере полное лямбда-выражение может быть переписано как:

UnaryOperator<Boolean> function = UnaryOperator.identity();