logo

Interfejsy funkcjonalne Java

Interfejs zawierający dokładnie jedną metodę abstrakcyjną nazywany jest interfejsem funkcjonalnym. Może mieć dowolną liczbę domyślnych metod statycznych, ale może zawierać tylko jedną metodę abstrakcyjną. Może także deklarować metody klasy obiektu.

Interfejs funkcjonalny jest również znany jako interfejsy pojedynczej metody abstrakcyjnej lub interfejsy SAM. Jest to nowa funkcja w Javie, która pomaga w osiągnięciu funkcjonalnego podejścia do programowania.


Przykład 1

 @FunctionalInterface interface sayable{ void say(String msg); } public class FunctionalInterfaceExample implements sayable{ public void say(String msg){ System.out.println(msg); } public static void main(String[] args) { FunctionalInterfaceExample fie = new FunctionalInterfaceExample(); fie.say('Hello there'); } } 
Przetestuj teraz

Wyjście:

 Hello there 

Interfejs funkcjonalny może posiadać metody klasy obiektowej. Zobacz w poniższym przykładzie.

Przykład 2

 @FunctionalInterface interface sayable{ void say(String msg); // abstract method // It can contain any number of Object class methods. int hashCode(); String toString(); boolean equals(Object obj); } public class FunctionalInterfaceExample2 implements sayable{ public void say(String msg){ System.out.println(msg); } public static void main(String[] args) { FunctionalInterfaceExample2 fie = new FunctionalInterfaceExample2(); fie.say('Hello there'); } } 
Przetestuj teraz

Wyjście:

 Hello there 

Nieprawidłowy interfejs funkcjonalny

Interfejs funkcjonalny może rozszerzać inny interfejs tylko wtedy, gdy nie posiada żadnej abstrakcyjnej metody.

 interface sayable{ void say(String msg); // abstract method } @FunctionalInterface interface Doable extends sayable{ // Invalid '@FunctionalInterface' annotation; Doable is not a functional interface void doIt(); } 

Wyjście:

 compile-time error 

Przykład 3

W poniższym przykładzie interfejs funkcjonalny rozszerza się na interfejs niefunkcjonalny.

 interface Doable{ default void doIt(){ System.out.println('Do it now'); } } @FunctionalInterface interface Sayable extends Doable{ void say(String msg); // abstract method } public class FunctionalInterfaceExample3 implements Sayable{ public void say(String msg){ System.out.println(msg); } public static void main(String[] args) { FunctionalInterfaceExample3 fie = new FunctionalInterfaceExample3(); fie.say('Hello there'); fie.doIt(); } } 
Przetestuj teraz

Wyjście:

przykład nazwy użytkownika
 Hello there Do it now 

Predefiniowane interfejsy funkcjonalne Java

Java udostępnia predefiniowane interfejsy funkcjonalne umożliwiające programowanie funkcjonalne za pomocą lambda i odwołań do metod.

Można także zdefiniować własny, niestandardowy interfejs funkcjonalny. Poniżej znajduje się lista interfejsów funkcjonalnych, które znajdują się w pakiecie java.util.function.


Interfejs Opis
BiKonsument Reprezentuje operację, która akceptuje dwa argumenty wejściowe i nie zwraca żadnego wyniku.
Konsument Reprezentuje operację, która akceptuje pojedynczy argument i nie zwraca żadnego wyniku.
Funkcjonować Reprezentuje funkcję, która przyjmuje jeden argument i zwraca wynik.
Orzec Reprezentuje predykat (funkcję o wartościach logicznych) jednego argumentu.
BiFunkcja Reprezentuje funkcję, która przyjmuje dwa argumenty i zwraca wynik.
Operator binarny Reprezentuje operację na dwóch operandach tego samego typu danych. Zwraca wynik tego samego typu co operandy.
BiPredykat Reprezentuje predykat (funkcję o wartościach logicznych) dwóch argumentów.
Dostawca logiczny Reprezentuje dostawcę wyników o wartościach logicznych.
Operator DoubleBinary Reprezentuje operację na dwóch operandach typu podwójnego i zwraca wartość typu podwójnego.
Podwójny konsument Reprezentuje operację, która akceptuje pojedynczy argument typu double i nie zwraca żadnego wyniku.
Podwójna funkcja Reprezentuje funkcję, która akceptuje argument typu double i generuje wynik.
Podwójny predykat Reprezentuje predykat (funkcję o wartości logicznej) jednego argumentu typu podwójnego.
Podwójny dostawca Reprezentuje dostawcę wyników podwójnego typu.
Funkcja DoubleToInt Reprezentuje funkcję, która akceptuje argument typu double i generuje wynik typu int.
Funkcja DoubleToLong Reprezentuje funkcję, która akceptuje argument typu podwójnego i generuje wynik typu długiego.
DoubleUnaryOperator Reprezentuje operację na pojedynczym operandzie typu podwójnego, która daje wynik typu podwójnego.
IntBinaryOperator Reprezentuje operację na dwóch operandach typu int i zwraca wynik typu int.
Konsument wewnętrzny Reprezentuje operację, która akceptuje pojedynczy argument w postaci liczby całkowitej i nie zwraca żadnego wyniku.
Funkcja Int Reprezentuje funkcję, która przyjmuje argument w postaci liczby całkowitej i zwraca wynik.
IntPredykat Reprezentuje predykat (funkcję o wartości logicznej) jednego argumentu będącego liczbą całkowitą.
Dostawca wewnętrzny Reprezentuje dostawcę typu całkowitego.
Funkcja IntToDouble Reprezentuje funkcję, która przyjmuje argument w postaci liczby całkowitej i zwraca wartość double.
Funkcja IntToLong Reprezentuje funkcję, która przyjmuje argument w postaci liczby całkowitej i zwraca wartość typu long.
IntUnaryOperator Reprezentuje operację na pojedynczym operandze całkowitym, która daje wynik w postaci liczby całkowitej.
Długi operator binarny Reprezentuje operację na dwóch operandach typu długiego i zwraca wynik typu długiego.
Długi Konsument Reprezentuje operację, która akceptuje pojedynczy argument typu długiego i nie zwraca żadnego wyniku.
Długa funkcja Reprezentuje funkcję, która akceptuje argument typu długiego i zwraca wynik.
Długie orzeczenie Reprezentuje predykat (funkcję o wartości logicznej) jednego argumentu typu długiego.
Długi dostawca Reprezentuje dostawcę wyników typu długiego.
Funkcja LongToDouble Reprezentuje funkcję, która akceptuje argument typu długiego i zwraca wynik typu podwójnego.
Funkcja LongToInt Reprezentuje funkcję, która akceptuje argument typu długiego i zwraca wynik w postaci liczby całkowitej.
Długi jednoargumentowy operator Reprezentuje operację na pojedynczym operandzie typu długiego, która zwraca wynik typu długiego.
ObjDoubleConsumer Reprezentuje operację, która akceptuje obiekt i podwójny argument i nie zwraca żadnego wyniku.
ObjIntConsumer Reprezentuje operację, która akceptuje obiekt i argument w postaci liczby całkowitej. Nie zwraca wyniku.
ObjLongConsumer Reprezentuje operację, która akceptuje obiekt i długi argument, nie zwraca żadnego wyniku.
Dostawca Reprezentuje dostawcę wyników.
Funkcja DoubleBi Reprezentuje funkcję, która przyjmuje dwa argumenty i generuje wynik typu double.
Do funkcji Double Reprezentuje funkcję zwracającą wynik typu double.
DoIntBiFunction Reprezentuje funkcję, która przyjmuje dwa argumenty i zwraca liczbę całkowitą.
Do funkcji Int Reprezentuje funkcję zwracającą liczbę całkowitą.
Funkcja ToLongBi Reprezentuje funkcję, która przyjmuje dwa argumenty i zwraca wynik typu długiego.
Funkcja ToLong Reprezentuje funkcję zwracającą wynik typu długiego.
Operator jednoargumentowy Reprezentuje operację na pojedynczym operandze, która zwraca wynik tego samego typu, co jego operand.