Страницы

Поиск по вопросам

среда, 27 ноября 2019 г.

Синтаксис Java: “->”

#java


Что обозначает это выражение?

private static final Predicate removeDotPred = symbol -> !MULTI_ARGS_SIGNAL.equals(symbol);


В частности, интересно, что значит знак "->".
    


Ответы

Ответ 1



В Java 8 появились лямбда выражения. Lambda-выражения – это что-то вроде анонимных функций. Если попроще — это метод без объявления, т.е. без модификаторов доступа, возвращающие значение и имя. Они позволяют написать метод и сразу же использовать его. Lambda-выражения в Java обычно имеют следующий синтаксис (аргументы) -> {тело} Например: (арг1, арг2...) -> { тело } (тип1 арг1, тип2 арг2...) -> { тело } Далее идет несколько примеров настоящих Lambda-выражений: (int a, int b) -> { return a + b; } () -> System.out.println("Hello World"); // Почему тут нет фигурных скобок - написано ниже (String s) -> { System.out.println(s); } // Фигурные скобки в данном случае не обязательны () -> 42 // Почему тут нет фигурных скобок - написано ниже () -> { return 3.1415 }; Структура lambda-выражений может быть разной: Lambda-выражения могут иметь от 0 и более входных параметров. Тип параметров можно указывать явно либо может быть получен из контекста. Например (int a) можно записать и так (a) Параметры заключаются в круглые скобки и разделяются запятыми. Пример: (a, b) или (int a, int b) или (String a, int b, float c) Если входных параметров нет, то нужно использовать пустые круглые скобки. Пример: () -> 42 Когда параметр один, если тип не указывается явно, скобки можно опустить. Пример: a -> return a*a Тело Lambda-выражения может содержать от 0 и более выражений. Если тело состоит из одного оператора, его можно не заключать в фигурные скобки, а возвращаемое значение можно указывать без ключевого слова return. В противном случае фигурные скобки обязательны (блок кода), а в конце надо указывать возвращаемое значение с использованием ключевого слова return (в противном случае типом возвращаемого значения будет void). В Вашем случае symbol -> !MULTI_ARGS_SIGNAL.equals(symbol); - это один входной параметр symbol, а тело состоит из одного оператора, а значит можно не указывать ключевое слово return, но оно подразумевается. По старому это будет как-то так: public boolean Test(symbol) { return !MULTI_ARGS_SIGNAL.equals(symbol); }

Комментариев нет:

Отправить комментарий