В чем проблема с оператором "->" lamda при кодировании в Groovy? - PullRequest
0 голосов
/ 21 декабря 2018

Возиться с JavaFX Я пишу это:

    MenuItem menuItem1 = new MenuItem("Item 1")
    menuItem1.setOnAction(e -> {
        println "Menu Item 1 Selected"
    })

Это дает ошибку в Eclipse: "Groovy: ожидая") 'found' -> '"

    MenuItem menuItem1 = new MenuItem("Item 1")
    menuItem1.setOnAction({ e -> 
        println "Menu Item 1 Selected $e"
    })

Это отлично работает.Как это сделать:

    menuItem1.onAction = { e ->
        println "Menu Item 1 Selected $e"
    }

Первый способ - это то, как вы делаете это в Java8 +.Почему Groovy говорит, что это незаконно, и есть ли какая-либо разница в использовании или области действия переменной e в двух или трех описанных выше способах выполнения действий?

1 Ответ

0 голосов
/ 21 декабря 2018

Это просто разница между Java и Groovy.Groovy с самого начала имеет замыкания - в Java добавлены лямбды в JDK8.

Из документов :

Java 8 поддерживает лямбды и ссылки на методы:

Runnable run = () -> System.out.println("Run");
list.forEach(System.out::println);

Java 8 лямбд можно более или менее рассматривать как анонимные внутренние классы.Groovy не поддерживает этот синтаксис, но вместо этого имеет замыкания:

Runnable run = { println 'run' }
list.each { println it } // or list.each(this.&println)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...