Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 24226|Odpowiedź: 1

[Źródło] Szczegółowe wyjaśnienie popularnych interfejsów funkcjonalnych (delegatów) w Javie

[Skopiuj link]
Opublikowano 16.09.2021 09:28:21 | | | |
API JDK 1.8 zawiera wiele wbudowanych interfejsów funkcjonalnych, takich jak Comparator lub interfejsy Runnable powszechnie używane w starej Javie, które dodają @FunctionalInterface adnotacji, aby mogły być używane na lambda. Teraz zrozummy to naprawdę z perspektywy wejścia wspólnych funkcji w Function.

nazwatypopis
KonsumentKonsumencki< T >Otrzymuje T obiektów, nie zwraca wartości
PredykatPredykat< T >Otrzymuje obiekt T i zwraca wartość boole'a
FunkcjaFunkcja< T, R >Otrzymuje obiekt T i zwraca obiekt R
DostawcaDostawca< T >Dostarczaj obiekty T (np. rośliny) bez akceptowania wartości
UnaryOperatorUnaryOperatorOtrzymuje obiekt T i zwraca obiekt T
BinaryOperatorBinaryOperatorOtrzymaj dwa obiekty T i zwróć obiekty T


Interfejs oznaczony jako FunctionalInterface nazywany jest interfejsem funkcjonalnym, który może mieć tylko jedną niestandardową metodę, ale może zawierać metody odziedziczone z klasy obiektów. Jeśli interfejs ma tylko jedną metodę, kompilator uzna go za interfejs funkcjonalny. Niezależnie od tego, czy jest to interfejs funkcjonalny, czy nie, należy zwrócić uwagę na następujące kwestie:


  • Adnotację można oznaczać tylko na interfejsach za pomocą "Istnieje tylko jedna metoda abstrakcyjna".
  • Metody statyczne i domyślne w interfejsie JDK8 nie są metodami abstrakcyjnymi.
  • Interfejs domyślnie dziedziczy java.lang.Object, więc jeśli interfejs pokazuje, że deklaracja nadpisuje metodę w Obiekcie, nie jest ona traktowana jako metoda abstrakcyjna.
  • Adnotacja nie jest wymagana, a jeśli interfejs spełnia definicję "interfejsu funkcjonalnego", nie ma ona wpływu na to, czy adnotacja zostanie dodana, czy nie. Dodatkowo adnotacje pozwalają kompilatorowi lepiej sprawdzać. Jeśli napiszesz interfejs niefunkcjonalny, ale dodasz @FunctionInterface, kompilator zgłosi błąd.
  • Zdefiniowanie dwóch niestandardowych metod w jednym interfejsie skutkuje nieprawidłową adnotacją '@FunctionalInterface'; FunctionalInterfaceTest nie jest błędem funkcjonalnego interfejsu.


java.util.function Zawiera kilka klas wspierających programowanie funkcyjne w Javie, a interfejsy funkcjonalne w tym pakiecie to:

Numer seryjny
Interfejs i opis
1BiConsumer<T,U>
Reprezentuje działanie akceptujące dwa parametry wejściowe i nie zwraca żadnych wyników
2BiFunction<T,U,R>
Reprezentuje metodę, która akceptuje dwa parametry wejściowe i zwraca wynik
3BinaryOperator<T>
reprezentuje działanie działające na dwóch operatorach tego samego typu i zwraca wynik tego samego typu operatora
4BiPredicate<T,U>
Reprezentuje dwuparametrową metodę wartości boole'a
5BooleanSupplier
Reprezentuje dostawcę wyniku wartości boole'a
6Konsument<T>
Reprezentuje operację, która akceptuje parametr wejściowy i nie zwraca nic
7DoubleBinaryOperator
reprezentuje działanie działające na dwóch operatorach o podwójnej wartości i zwraca wynik podwójnej wartości.
8DoubleConsumer
Reprezentuje akcję, która akceptuje parametr podwójnej wartości i nie zwraca wyniku.
9DoubleFunction<R>
Reprezentuje metodę, która akceptuje parametr o podwójnej wartości i zwraca wynik
10DoublePredicate
Reprezentuje metodę wartości boole'a z parametrem podwójnej wartości
11DoubleSupplier
Reprezentuje dostawcę struktury podwójnej wartości
12DoubleToIntFunction
Akceptuje wejście typu podwójnego i zwraca wynik typu int.
13DoubleToLongFunction
Akceptuje wejście typu podwójnego i zwraca wynik typu długiego
14DoubleUnaryOperator
Przyjmijmy parametr tego samego typu podwójnie, a typ wartości zwrotnej również jest podwójny.
15Funkcja<T,R>
Akceptuje parametr wejściowy, zwraca wynik.
16IntBinaryOperator
Zaakceptuj oba parametry: typ int, oraz zwróć wartość typu int.
17IntConsumer
Akceptuje parametr wejściowy typu int bez wartości zwrotnej.
18IntFunction<R>
Akceptuje parametr wejściowy typu int i zwraca wynik.
19IntPredykat
: Akceptuje parametr wejściowy int i zwraca wynik booleowski.
20IntSupplier
Brak parametrów, zwraca wynik typu int.
21IntToDoubleFunction
Akceptuje wejście typu int i zwraca wynik typu podwójnego.
22IntToLongFunction
Akceptuje wejście typu int i zwraca długi wynik typu.
23IntUnaryOperator
Zaakceptuj parametr typu int i zwróć wartość typu również int.
24LongBinaryOperator
Akceptuj oba parametry: typ long i zwrot wartości typu as long.
25LongConsumer
Zaakceptuj parametr wejściowy typu long, bez wartości zwrotnej.
26LongFunction<R>
Akceptuje długi parametr wejściowy typu i zwraca wynik.
27LongPredykat
R akceptuje długi parametr wejściowy i zwraca wynik typu boole'a.
28LongSupplier
Brak parametru, zwraca wynik typu long.
29LongToDoubleFunction
Akceptuje długie wejście typu i zwraca wynik typu podwójnego.
30LongToIntFunction
Akceptuje wejście typu długiego i zwraca wynik typu int.
31LongUnaryOperator
Przyjmij parametr tego samego typu co long i zwróć wartość typu również long .
32ObjDoubleConsumer<T>
Zaakceptuj typ obiektu oraz podwójny typ wejściowy bez wartości zwracanej.
33ObjIntConsumer<T>
Zaakceptuj parametry wejściowe typu obiektu i typu int bez wartości zwrotnej.
34ObjLongConsumer<T>
Akceptuje parametry wejściowe obiektu typu i typu long bez zwracania wartości.
35Predykat<T>
Akceptuje parametr wejściowy i zwraca wynik boolowski.
36Dostawca<T>
Brak parametrów, zwraca wynik.
37ToDoubleBiFunction<T,U>
Akceptuje dwa parametry wejściowe i zwraca wynik typu podwójnego
38ToDoubleFunction<T>
Akceptuje parametr wejściowy i zwraca wynik typu podwójnego
39ToIntBiFunction<T,U>
Zaakceptuj dwa parametry wejściowe i zwróć wynik typu int.
40ToIntFunction<T>
Zaakceptuj parametr wejściowy i zwróć wynik typu int.
41ToLongBiFunction<T,U>
Zaakceptuj dwa parametry wejściowe i zwróć wynik typu długiego.
42ToLongFunction<T>
Zaakceptuj parametr wejściowy i zwróć długi wynik typu.
43UnaryOperator<T>
Przyjmij parametr typu T i zwróć wartość typu T.


JaInterfejs funkcjonalny w Javie to delegat w .NET/C#, przechodzi metodą jako parametr, w następujący sposób:

Wprowadzenie do delegatów C# (delegate, Action, Func, predykat)
https://www.itsvse.com/thread-4658-1-1.html

Funkcja Powszechne metody i praktyki

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

Chociaż funkcje< T, R > odbierać T obiektów, zwracać R obiektów oraz tylko jeden obiekt odbiorczy i zwrotny, to w połączeniu z krotkami można uzyskać wiele wartości przychodzących i zwrotnych, odwołuj się do:


Przykład 1: Przekaż dwie wartości i zsumuj je

Możesz używać zwykłego pisma i wyrażeń lambda, a kod wygląda następująco:





Przykład 2:

i Potem metoda



Metoda kompose



Pełny kod



Wyniki powrotne



(Koniec)




Poprzedni:Rozwiązanie wyjątkowe Java FeignClient Interface dla wielu identycznych nazw usług
Następny:projekt maven \cel\klasy\META-INF\MANIFEST. MF (system...
Opublikowano 19.09.2021 19:34:22 |
Java też wyglądała, choć nie jest używana
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com