O java 8 introduziu varias funcionalidades interessantes, como novus API de Stream, Необязательно, Дата и время e Функциональные интерфейсы.
Данная статья имеет цель сделать краткое введение о том, Интерфейсы и Функциональные представить наиболее распространенные типы доступны начиная с JDK 8.
Интерфейсы функциональных позволяют работать с пробки на Java. Закрытие-это функция, которая знает область, в которой он был создан. То есть функция имеет доступ к вашим переменные и переменные и параметры функции внешнего, который ее создал. Интерфейсы функциональных, также можно, проходя функции по параметрам или вернуть их.
Функциональный Интерфейс должен обязательно иметь один и только один абстрактный метод, но, возможно, других методов, default .
Кроме того, рекомендуется записать интерфейс с @FunctionalInterface
. Эта заметка поможет компилятору сообщить об ошибке при попытке добавить еще один абстрактный метод. Содержать это примечание является обязательным, так что соблюдайте правило, чтобы иметь только один абстрактный метод.
Пример:
@FunctionalInterface public interface Operacao { int calcular(int a, int b); }
Для определения функции из интерфейса, мы используем лямбда-выражений. Лямбда-ничего, это анонимная функция, которая не имеет имени и не связан, как метод класса. Ниже несколько способов создать функцию с помощью лямбда-выражения:
- Ключи : когда тело функции имеет несколько инструкций.
Funcao fn = (a, b) -> { System.out.println("Realizando a soma..."); // instrução 1 return a + b; // instrução 2 };
- Без ключей : когда функция имеет только один оператор. Результат инструкции
a + b
возвращается при вызове функции.
Funcao fn = (a, b) -> a + b;
- Без скобки аргумент : когда есть только 1 параметр в функции, мы можем опустить скобки.
Funcao fn = x -> x * 2;
Таким образом, используя приведенный выше пример интерфейса Функционирование
, создаем несколько математических операций с помощью лямбда-выражения:
Operacao soma = (a, b) -> a + b; Operacao subtracao = (a, b) -> a - b; Operacao divisao = (a, b) -> a / b; Operacao multiplicacao = (a, b) -> a * b; System.out.println(soma.calcular(1, 2)); // 3 System.out.println(subtracao.calcular(5, 1)); // 4 System.out.println(divisao.calcular(10, 5)); // 2 System.out.println(multiplicacao.calcular(2, 5)); // 10
Анализируя приведенный выше пример, мы можем отметить, что тот же интерфейс используется для различных математических операций, и код был весьма ограничен и самых читаемых!
Но если вы не хотите, чтобы остаться, создавая функциональные интерфейсы в проекте, можно также использовать уже доступные в Java. Давайте знать некоторые?
java.util.функция. Функция R> R>
Эта функция принимает параметр типа T и возвращает значение типа A.
@FunctionalInterface public interface Function{ /** * Applies this function to the given argument. * * @param t the function argument * @return the function result */ R apply(T t); }
Пример:
FunctiondividePorDois = x -> ((float) x / 2); System.out.println(dividePorDois.apply(15)); // 7.5
java.util.функция. Потребитель
Эта функция принимает параметр типа T, но ничего не возвращает.
@FunctionalInterface public interface Consumer{ /** * Performs this operation on the given argument. * * @param t the input argument */ void accept(T t); }
Пример:
ConsumerexibeMensagem = str -> System.out.println(str); // ou Consumer exibeMensagem2 = System.out::println; exibeMensagem.accept("Hello World!"); // Hello World! exibeMensagem2.accept("Hello World!"); // Hello World!
Обратите внимание, что, как и метод println
имеет ту же подпись метода |интерфейса| Потребитель<Строка> (принимает Строку и ничего не возвращает), и есть только один оператор в функции, мы можем передать ссылку на сам метод
println . Isso se chama
Ссылка на метод .
java.util.функция. Поставщик
Эта функция не принимает параметров и возвращает значение типа T.
@FunctionalInterface public interface Supplier{ /** * Gets a result. * * @return a result */ T get(); }
Пример:
SupplierdataAtual = () -> LocalDate.now(); System.out.println(dataAtual.get()); // 2021-06-02
java.util.функция. Предикат
Эта функция принимает параметр типа T и возвращает логическое значение.
@FunctionalInterface public interface Predicate{ /** * Evaluates this predicate on the given argument. * * @param t the input argument * @return {@code true} if the input argument matches the predicate, * otherwise {@code false} */ boolean test(T t); }
Пример:
PredicatemaiorDeIdade = dataNascimento -> { return dataNascimento.until(LocalDate.now(), ChronoUnit.YEARS) >= 18; }; System.out.println(maiorDeIdade.test(LocalDate.of(1985, 10, 5))); // true
Интерфейсы доступны в JDK, описанные в этой статье есть специализации, которые позволяют получать два параметра (добавить префикс Bi
) или работать непосредственно с примитивных типов (добавить префикс Int,
, Long
или Double
). Примеры: Bi Функция, Int Функция, Длинный Функция e Двойная Функция.
Мы видели четырех основных типов функциональных интерфейс. Настоятельно рекомендую вам изучить различные варианты, что JDK предоставляет и применять их как можно чаще в проектах.
Примеры использования операционной системы neste artigo esta no repositório: https://github.com/andrebuarque/functional-interfaces-java .
До свидания!
Оригинал: “https://dev.to/andrebuarque/introducao-a-interfaces-funcionais-no-java-8-njb”