Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 24226|Відповідь: 1

[Джерело] Детальне пояснення поширених функціональних інтерфейсів (делегатів) у Java

[Копіювати посилання]
Опубліковано 16.09.2021 09:28:21 | | | |
API JDK 1.8 включає багато вбудованих функціональних інтерфейсів, таких як інтерфейси Comparator або Runnable, які часто використовувалися в старій Java, які додають @FunctionalInterface анотації, щоб їх можна було використовувати на лямбдах. Тепер давайте дійсно розберемося з точки зору поширених функцій у Function.

Ім'ятипопис
СпоживачСпоживач< Т >Отримує T об'єктів, не повертає значення
ПредикатПредикат< T >Отримує об'єкт T і повертає булеву
ФункціяФункція< T, R >Отримує об'єкт T і повертає об'єкт R
ПостачальникаПостачальник< T >Надати T об'єкти (наприклад, рослини) без прийняття значень
UnaryOperatorUnaryOperatorОтримує об'єкт T і повертає об'єкт T
Бінарний операторБінарний операторОтримайте два T об'єкти та поверніть T об'єкти


Інтерфейс, позначений як FunctionalInterface, називається функціональним інтерфейсом, який може мати лише один власний метод, але може включати методи, успадковані від класу об'єктів. Якщо інтерфейс має лише один метод, компілятор вважатиме його функціональним інтерфейсом. Незалежно від того, чи є це функціональним інтерфейсом, слід звернути увагу на наступні моменти:


  • Анотацію можна позначати лише на інтерфейсах словами «Існує лише один абстрактний метод».
  • Статичні та стандартні методи в інтерфейсі 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 і return value type int.
17IntConsumer
Приймає вхідний параметр типу int без поверненого значення.
18IntFunction<R>
Приймає вхідний параметр типу int і повертає результат.
19IntPredicate
: Приймає вхідний параметр int і повертає булевий результат.
20IntSupplier
Немає параметрів, повертає результат типу int.
21IntToDoubleFunction
Приймає вхідний сигнал типу int і повертає результат подвійного типу.
22IntToLongFunction
Приймає вхід типу int і повертає результат довгого типу.
23IntUnaryOperator
Прийміть параметр типу int, і поверніть значення, тип значення також int.
24LongBinaryOperator
Прийміть обидва параметри — тип long і тип поверненого значення — як long.
25LongConsumer
Прийміть вхідний параметр типу long без поверненого значення.
26LongFunction<R>
Приймає вхідний параметр довгого типу і повертає результат.
27Довгий предикат
R приймає довгий вхідний параметр і повертає результат булевого типу.
28LongSupplier
Без параметра, він повертає результат типу long.
29LongToDoubleFunction
Приймає вхід з довгим типом і повертає результат подвійного типу.
30LongToIntFunction
Приймає вхід довгого типу і повертає результат int-типу.
31LongUnaryOperator
Прийміть параметр того ж типу як long, і поверніть значення типу також long.
32ObjDoubleConsumer<T>
Прийняти тип об'єкта та вхідний параметр подвійного типу без поверненого значення.
33ObjIntConsumer<T>
Приймайте вхідні параметри типу об'єкта та типу int без поверненого значення.
34ObjLongConsumer<T>
Приймає вхідні параметри типу, об'єкта та типу long, без повернення значень.
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# (delegate, Action, Func, предикат)
https://www.itsvse.com/thread-4658-1-1.html

Функції Поширені методи та практики

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

Хоча Function< 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