O interfață care conține exact o metodă abstractă este cunoscută ca interfață funcțională. Poate avea orice număr de metode implicite, statice, dar poate conține o singură metodă abstractă. De asemenea, poate declara metode ale clasei de obiecte.
Interfața funcțională este cunoscută și sub numele de interfețe cu metoda abstractă unică sau interfețe SAM. Este o caracteristică nouă în Java, care ajută la realizarea abordării de programare funcțională.
Exemplul 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'); } }Testează-l acum
Ieșire:
Hello there
O interfață funcțională poate avea metode de clasă obiect. Vezi în exemplul următor.
Exemplul 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'); } }Testează-l acum
Ieșire:
Hello there
Interfață funcțională nevalidă
O interfață funcțională poate extinde o altă interfață numai atunci când nu are nicio metodă abstractă.
interface sayable{ void say(String msg); // abstract method } @FunctionalInterface interface Doable extends sayable{ // Invalid '@FunctionalInterface' annotation; Doable is not a functional interface void doIt(); }
Ieșire:
compile-time error
Exemplul 3
În exemplul următor, o interfață funcțională se extinde la o interfață nefuncțională.
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(); } }Testează-l acum
Ieșire:
fereastra.deschide javascript
Hello there Do it now
Interfețe funcționale predefinite Java
Java oferă interfețe funcționale predefinite pentru a se ocupa de programarea funcțională folosind referințe lambda și metode.
De asemenea, vă puteți defini propria interfață funcțională personalizată. Mai jos este lista de interfețe funcționale care sunt plasate în pachetul java.util.function.
Interfață | Descriere |
---|---|
BiConsumer | Reprezintă o operație care acceptă două argumente de intrare și nu returnează niciun rezultat. |
Consumator | Reprezintă o operație care acceptă un singur argument și nu returnează niciun rezultat. |
Funcţie | Reprezintă o funcție care acceptă un argument și returnează un rezultat. |
Predicat | Reprezintă un predicat (funcție cu valori booleene) al unui argument. |
BiFunction | Reprezintă o funcție care acceptă două argumente și returnează un rezultat. |
BinaryOperator | Reprezintă o operație asupra a doi operanzi de același tip de date. Returnează un rezultat de același tip ca și operanzii. |
BiPredicat | Reprezintă un predicat (funcție cu valori booleene) a două argumente. |
Furnizor boolean | Reprezintă un furnizor de rezultate cu valoare booleană. |
DoubleBinaryOperator | Reprezintă o operație pe doi operanzi de tip dublu și returnează o valoare de tip dublu. |
DoubleConsumer | Reprezintă o operație care acceptă un singur argument de tip dublu și nu returnează niciun rezultat. |
DoubleFunction | Reprezintă o funcție care acceptă un argument de tip dublu și produce un rezultat. |
DoublePredicate | Reprezintă un predicat (funcție cu valori booleene) cu un argument de tip dublu. |
Double Supplier | Reprezintă un furnizor de rezultate de tip dublu. |
DoubleToIntFunction | Reprezintă o funcție care acceptă un argument de tip dublu și produce un rezultat de tip int. |
DoubleToLongFunction | Reprezintă o funcție care acceptă un argument de tip dublu și produce un rezultat de tip lung. |
DoubleUnaryOperator | Reprezintă o operație pe un singur operand de tip dublu care produce un rezultat de tip dublu. |
IntBinaryOperator | Reprezintă o operație pe doi operanzi de tip int și returnează un rezultat de tip int. |
IntConsumer | Reprezintă o operație care acceptă un singur argument întreg și nu returnează niciun rezultat. |
IntFunction | Reprezintă o funcție care acceptă un argument întreg și returnează un rezultat. |
IntPredicate | Reprezintă un predicat (funcție cu valori booleene) al unui argument întreg. |
IntSupplier | Reprezintă un furnizor de tip întreg. |
IntToDoubleFunction | Reprezintă o funcție care acceptă un argument întreg și returnează un dublu. |
IntToLongFunction | Reprezintă o funcție care acceptă un argument întreg și returnează un lung. |
IntUnaryOperator | Reprezintă o operație pe un singur operand întreg care produce un rezultat întreg. |
LongBinaryOperator | Reprezintă o operație pe doi operanzi de tip lung și returnează un rezultat de tip lung. |
LongConsumer | Reprezintă o operație care acceptă un singur argument de tip lung și nu returnează niciun rezultat. |
LongFunction | Reprezintă o funcție care acceptă un argument de tip lung și returnează un rezultat. |
LongPredicate | Reprezintă un predicat (funcție cu valori booleene) cu un argument de tip lung. |
Furnizor lung | Reprezintă un furnizor de rezultate de tip lung. |
LongToDoubleFunction | Reprezintă o funcție care acceptă un argument de tip lung și returnează un rezultat de tip dublu. |
LongToIntFunction | Reprezintă o funcție care acceptă un argument de tip lung și returnează un rezultat întreg. |
LongUnaryOperator | Reprezintă o operație pe un singur operand de tip lung care returnează un rezultat de tip lung. |
ObjDoubleConsumer | Reprezintă o operație care acceptă un obiect și un argument dublu și nu returnează niciun rezultat. |
ObjIntConsumer | Reprezintă o operație care acceptă un obiect și un argument întreg. Nu returnează rezultat. |
ObjLongConsumer | Reprezintă o operație care acceptă un obiect și un argument lung, nu returnează niciun rezultat. |
Furnizor | Reprezintă un furnizor de rezultate. |
ToDoubleBiFunction | Reprezintă o funcție care acceptă două argumente și produce un rezultat de tip dublu. |
ToDoubleFunction | Reprezintă o funcție care returnează un rezultat de tip dublu. |
ToIntBiFunction | Reprezintă o funcție care acceptă două argumente și returnează un număr întreg. |
ToIntFunction | Reprezintă o funcție care returnează un număr întreg. |
ToLongBiFunction | Reprezintă o funcție care acceptă două argumente și returnează un rezultat de tip lung. |
ToLongFunction | Reprezintă o funcție care returnează un rezultat de tip lung. |
UnaryOperator | Reprezintă o operație pe un singur operand care returnează un rezultat de același tip ca și operandul său. |