Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 24226|Отговор: 1

[Източник] Подробно обяснение на често срещани функционални интерфейси (делегати) в Java

[Копирай линк]
Публикувано в 16.09.2021 г. 9:28:21 ч. | | | |
JDK 1.8 API включва много вградени функционални интерфейси, като Comparator или Runnable интерфейсите, често използвани в старата Java, които добавят @FunctionalInterface анотации, за да могат да се използват върху ламбда. Сега, нека го разберем наистина от входа на общите функции във Function.

Имевидописание
ПотребителКонсумър< Т >Получава T обекти, не връща стойности
ПредикатПредикат< Т >Получава обекта T и връща булевия елемент
ФункцияФункция< T, R >Получава T обект и връща R обект
ДоставчикДоставчик< T >Предоставяне на T обекти (например растения) без приемане на стойности
UnaryOperatorUnaryOperatorПолучава T обект и връща T обект
БинаренОператорБинаренОператорПолучи два T обекта и върни T обекта


Интерфейс, означен като Функционален интерфейс, се нарича функционален интерфейс, който може да има само един персонализиран метод, но може да включва методи, наследени от класа на обектите. Ако интерфейсът има само един метод, компилаторът ще мисли, че това е функционален интерфейс. Независимо дали е функционален интерфейс или не, трябва да се отбележат следните точки:


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


java.util.function Той съдържа редица класове за поддръжка на функционалното програмиране на Java, а функционалните интерфейси в този пакет са:

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


АзФункционалният интерфейс в Java е делегатът в .NET/C#, предайте метода като параметър, както следва:

Въведение в делегатите по C# (делегат, Действие, Функ, предикат)
https://www.itsvse.com/thread-4658-1-1.html

Функции Общи методи и практики

//将Function对象应用到输入的参数上,然后返回计算结果。
R apply(T t);

Въпреки че Функция< T, R > приемат T обекти, връщат R обекти и само един обект за приемане и връщане, но в комбинация с кортежи могат да се постигнат множество входящи и връщащи стойности, вижте на:

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

Пример 1: Подайте две стойности и ги сумирате

Можеш да използваш обикновен писмен и лямбда изрази, кодът е следният:





Пример 2:

и тогава метод



Метод на композиция



Пълен код



Резултати от резултати



(Край)




Предишен:Java FeignClient Interface решение за изключение за множество идентични имена на услуги
Следващ:Maven Project \target\classes\META-INF\MANIFEST. MF (система...
Публикувано в 19.09.2021 г. 19:34:22 ч. |
Java също се търсеше, макар че не се използва
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com