架构师_程序员_码农网

Имя пользователя Получить пароль
Регистрация

QQ登录

Всего один шаг, чтобы начать

Поиск
Просмотров:12917|Ответов: 1
打印 上一主题 下一主题

[Информация]Java общие функциональные интерфейсы (делегаты)

[копировать ссылку]
Поднимайте прямо к 跳转到指定楼层
владелец
发表于 2021-9-16 09:28:21|只看该作者回帖奖励|Реверсивныйпросмотр|Режим чтения
API JDK 1.8 включает ряд встроенных функциональных интерфейсов, широко используемых в старых версиях Java, таких как интерфейсы Comparator или Runnable, которые снабжены аннотацией @FunctionalInterface, чтобы их можно было использовать в лямбдах. Теперь давайте рассмотрим точку входа Function и посмотрим, что она из себя представляет.

имя тип описание
Потребитель Consumer< T > Получает объект T, не возвращает значение.
Предикат Предикат< T > Получает объект T и возвращает булево значение.
Функция Функция< T, R > Принимает объект T и возвращает объект R
Поставщик Supplier< T > Поставляет объект T (например, фабрику), не получает значения.
UnaryOperator UnaryOperator Получает объект T, возвращает объект T
BinaryOperator BinaryOperator Принимает два объекта T и возвращает объект T


Интерфейс с пометкой FunctionalInterface называется функциональным интерфейсом, который может иметь только один собственный метод, но может включать методы, унаследованные от класса объекта. Если интерфейс имеет только один метод, компилятор считает его функциональным интерфейсом. Есть несколько моментов, на которые следует обратить внимание при определении того, является ли интерфейс функциональным:


  • Эта аннотация может быть отмечена только для интерфейсов, которые "имеют один и только один абстрактный метод". Статические методы и методы по умолчанию в интерфейсах JDK8 не считаются абстрактными методами.
  • Интерфейс по умолчанию наследует java.lang.Object, поэтому если интерфейс отображает объявление, которое переопределяет метод в Object, то он также не считается абстрактным методом.
  • Эта аннотация не является обязательной, и не имеет значения, соответствует ли интерфейс определению "функционального интерфейса" или нет. Добавление аннотации облегчает компилятору проверку. Если вы напишете нефункциональный интерфейс, но добавите @FunctionInterface, компилятор сообщит об ошибке.
  • Определение двух пользовательских методов в интерфейсе приводит к аннотации Invalid '@FunctionalInterface'; FunctionalInterfaceTest не является функциональным интерфейсом.


java.util.function Он содержит множество классов для поддержки функционального программирования на Java, функциональные интерфейсы в этом пакете:

Нет.
Интерфейс и описание
1BiConsumer<T,U>
представляет операцию, которая принимает два входных параметра и не возвращает результат
2BiFunction<T,U,R>
представляет метод, который принимает два входных параметра и возвращает результат.
3BinaryOperator<T>
представляет операцию, которая действует над двумя операторами одного типа и возвращает результат того же типа.
4 BinaryOperator<T,U>BiPredicate<T,U>
представляет метод с булевым значением и двумя аргументами.
5BooleanSupplier
Представляет поставщика результата булевого значения.
6Consumer<T>
Представляет операцию, которая принимает входной параметр и ничего не возвращает.
7DoubleBinaryOperator
Представляет операцию, которая действует над двумя операторами с двойным значением и возвращает результат с двойным значением.
8DoubleConsumer
Представляет операцию, которая принимает аргумент с двойным значением и не возвращает результат.
9DoubleFunction<R>
Представляет метод, который принимает двойной аргумент и возвращает результат.
10DoublePredicate
Представляет метод с булевым значением и аргументом с двойным значением.
11DoubleSupplier
Представляет поставщика структуры с двойным значением.
12DoubleToIntFunction
Принимает на вход тип double и возвращает результат типа int.
13DoubleToLongFunction
Принимает на вход тип double и возвращает результат типа long.
14DoubleUnaryOperator
Принимает параметр типа double и возвращает значение типа double.
15Функция<T,R>
Принимает один входной параметр и возвращает результат.
16IntBinaryOperator
Принимает два аргумента типа int и возвращает значение типа int.
17IntConsumer
Принимает один входной параметр типа int, без возвращаемого значения.
18IntFunction<R>
Принимает входной параметр типа int и возвращает результат.
19IntPredicate
: Принимает входной параметр типа int и возвращает результат типа boolean.
20IntSupplier
Не принимает аргументов и возвращает результат типа int.
21IntToDoubleFunction
Принимает входной сигнал типа int и возвращает результат типа double.
22IntToLongFunction
Принимает на вход int и возвращает длинный результат.
23IntUnaryOperator
Принимает параметр типа int и возвращает значение типа int.
24LongBinaryOperator
Принимает два параметра типа long, возвращаемое значение также имеет тип long.
25 LongConsumerLongConsumer
Принимает один входной параметр типа long и не имеет возвращаемого значения.
26LongFunction<R>
Принимает входной параметр типа long и возвращает результат.
27LongPredicate
R принимает входной параметр типа long и возвращает результат типа boolean.
28LongSupplier
Возвращает результат типа long без аргументов.
29 Функция LongToDoubleFunctionLongToDoubleFunction
Принимает входное значение типа long и возвращает результат типа double.
30LongToIntFunction
Принимает длинный входной сигнал и возвращает результат в виде инта.
31LongUnaryOperator
Принимает параметр типа long и возвращает значение типа long.
32ObjDoubleConsumer<T>
Принимает один входной параметр типа object и один входной параметр типа double, без возвращаемого значения.
33ObjIntConsumer<T>
Принимает входной параметр типа object и тип int, без возвращаемого значения.
34ObjLongConsumer<T>
Принимает входной параметр типа object и типа long, без возвращаемого значения.
35Predicate<T>
Принимает один входной параметр и возвращает булев результат.
36Поставщик<T>
Не принимает никаких аргументов и возвращает результат.
37ToDoubleBiFunction<T,U>
Принимает два входных параметра и возвращает результат типа double
38ToDoubleFunction<T>
Принимает один входной параметр и возвращает результат типа double.
39ToIntBiFunction<T,U>
Принимает два входных параметра и возвращает результат типа int.
40ToIntFunction<T>
Принимает один входной параметр и возвращает результат типа int.
41ToLongBiFunction<T,U>
Принимает два входных параметра и возвращает результат типа long.
42ToLongFunction<T>
Принимает один входной параметр и возвращает длинный результат.
43UnaryOperator<T>
Принимает параметр типа T и возвращает значение типа T.


Функциональный интерфейс в Java, как я его понимаю, - это делегат в .NET/C#, который передает методы в качестве параметров следующим образом:

Введение в делегаты C# (делегат, действие, Func, предикат)
h ttps:// www.itsvse.com/thread-4658-1-1.html

Общие методы функций && практика

// Применить объект Function к входным параметрам и вернуть результат вычисления.
R apply(T t).

Хотя Function< T, R > получает объект T и возвращает объект R только с одним объектом получения и возврата, объединение кортежей позволяет использовать несколько входящих значений и возвращаемых значений ref:

Использование кортежей в Java
h ttps:// www.itsvse.com/thread-10055-1-1.html

Пример 1: Передача двух значений и их суммирование

Вы можете использовать обычную запись и запись лямбда-выражений, код выглядит следующим образом:





Пример второй:

метод andThen



Метод Compose



Полный код



Вернуться к результатам



(Окончание)




Предыдущий: Решение проблемы множественных исключений интерфейса Java FeignClient с одинаковым именем сервиса
Следующая: maven проект \target\classes\META-INF\MANIFEST.MF (системный...
NET, публикуется только в процессе практики, столкнувшись с техническими трудностями, не вводите в заблуждение других.
Джимми Чу Чу Чу
диван
发表于 2021-9-19 19:34:22|只看该作者
Я не уверен, что смогу это сделать, но я собираюсь взглянуть на это.
Я не уверен, что смогу это сделать, но уверен, что смогу, и я уверен, что смогу это сделать.
Вы должны войти в систему, прежде чем сможете отправлять сообщения назад Войти | Зарегистрироваться

Эта версия интегральных правил


DISCLAIMER: Все программное обеспечение, материалы по программированию или статьи, опубликованные Code Farmer, предназначены только для использования в учебных и исследовательских целях; вышеуказанное содержимое не должно использоваться в коммерческих или незаконных целях, в противном случае все последствия будут возложены на самих пользователей. Это сайт информации из сети, спор об авторских правах не имеет никакого отношения к этому сайту. Вы должны полностью удалить вышеуказанное содержимое со своего компьютера в течение 24 часов после загрузки. Если вам понравилась программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшее подлинное обслуживание. Если есть какие-либо нарушения, пожалуйста, свяжитесь с нами по электронной почте, чтобы разобраться с этим.

Почта To:help@itsvse.com

QQ| ( 鲁ICP备14021824号-2)|Sitemap

GMT+8, 2024-9-19 02:54

Быстрый ответНазад к началуНазад к списку