#java #javafx
Есть работающий код: bExchColumn.setCellFactory(column -> EditCell.createStringEditCell()); При попытке вставить фигурные скобки в лямбда-выражение ... bExchColumn.setCellFactory(column -> {EditCell.createStringEditCell();}); eclipse ругается: The method setCellFactory(CallBack,TableCell >) in the type TableColumn is not applicable for the arguments (( column) -> {})" В чем ошибка и как исправить?
Ответы
Ответ 1
Цитаты из урока Oracle по лямбдам (расставил акценты и перевёл). В разделе "из чего состоит лямбда": A body, which consists of a single expression or a statement block. Тело, состоящее из единственного выражения или блока инструкций. Обращаю внимание, что "блок инструкций" это набор инструкций в {}. Далее: If you specify a single expression, then the Java runtime evaluates the expression and then returns its value. Alternatively, you can use a return statement Если указать единственное выражение, рантайм Java вычислит это выражение и вернёт его значение. Или же можно использовать инструкцию return Посему, вот два равноценных примера: p -> выражение p -> { return выражение; } Вы же написали p -> { выражение; }, которое им не эквивалентно и ничего не возвращает.Ответ 2
До полноценной лямбды не хватает return: {return EditCell.createStringEditCell();}Ответ 3
Метод bExchColumn.setCellFactory() ожидает какой-то аргумент, который должно вернуть лямбда-выражение. В вашем работающем варианте в качестве аргумента используется значение, возвращенное методом EditCell.createStringEditCell() (потому что лямбда состоит из него одного), а во втором варианте этот метод - часть тела лямбда-выражения, а его результат не возвращается из лямбды, а игнорируется (не присваивается ничему и не возвращается).
Комментариев нет:
Отправить комментарий