En grænseflade, der indeholder præcis én abstrakt metode, er kendt som funktionel grænseflade. Den kan have et hvilket som helst antal standard, statiske metoder, men kan kun indeholde én abstrakt metode. Det kan også erklære metoder for objektklasse.
Funktionel grænseflade er også kendt som Single Abstract Method Interfaces eller SAM Interfaces. Det er en ny funktion i Java, som hjælper med at opnå en funktionel programmeringstilgang.
fuld hugorm
Eksempel 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'); } }Test det nu
Produktion:
Hello there
En funktionel grænseflade kan have metoder til objektklasse. Se i det følgende eksempel.
Eksempel 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'); } }Test det nu
Produktion:
Hello there
Ugyldig funktionel grænseflade
En funktionel grænseflade kan kun udvide en anden grænseflade, når den ikke har nogen abstrakt metode.
interface sayable{ void say(String msg); // abstract method } @FunctionalInterface interface Doable extends sayable{ // Invalid '@FunctionalInterface' annotation; Doable is not a functional interface void doIt(); }
Produktion:
compile-time error
Eksempel 3
I det følgende eksempel udvides en funktionel grænseflade til en ikke-funktionel grænseflade.
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(); } }Test det nu
Produktion:
latex tekststørrelse
Hello there Do it now
Java prædefinerede-funktionelle grænseflader
Java giver foruddefinerede funktionelle grænseflader til at håndtere funktionel programmering ved at bruge lambda- og metodereferencer.
Du kan også definere din egen brugerdefinerede funktionelle grænseflade. Følgende er listen over funktionelle grænseflader, som er placeret i java.util.function-pakken.
Interface | Beskrivelse |
---|---|
BiConsumer | Det repræsenterer en operation, der accepterer to input-argumenter og ikke returnerer noget resultat. |
Forbruger | Det repræsenterer en operation, der accepterer et enkelt argument og ikke returnerer noget resultat. |
Fungere | Det repræsenterer en funktion, der accepterer et argument og returnerer et resultat. |
Prædikat | Det repræsenterer et prædikat (funktion med boolesk værdi) af et argument. |
BiFunktion | Den repræsenterer en funktion, der accepterer to argumenter og returnerer et a-resultat. |
Binær operatør | Det repræsenterer en operation på to operander af samme datatype. Det returnerer et resultat af samme type som operanderne. |
Biprædikat | Det repræsenterer et prædikat (funktion med boolsk værdi) af to argumenter. |
Boolean Leverandør | Det repræsenterer en leverandør af boolsk værdifulde resultater. |
DoubleBinaryOperator | Det repræsenterer en operation på to dobbelttype operander og returnerer en dobbelt type værdi. |
DoubleConsumer | Det repræsenterer en operation, der accepterer et enkelt dobbelttype-argument og ikke returnerer noget resultat. |
Dobbeltfunktion | Den repræsenterer en funktion, der accepterer et dobbelttypeargument og producerer et resultat. |
Dobbeltprædikat | Det repræsenterer et prædikat (funktion med boolesk værdi) af et dobbelttypeargument. |
DoubleSupplier | Det repræsenterer en leverandør af dobbelttype resultater. |
DoubleToIntFunction | Det repræsenterer en funktion, der accepterer et dobbelttype-argument og producerer et resultat af int-type. |
DoubleToLongFunction | Det repræsenterer en funktion, der accepterer et dobbelttypeargument og producerer et langt typeresultat. |
DoubleUnaryOperator | Det repræsenterer en operation på en enkelt dobbelt type operand, der producerer et dobbelt type resultat. |
IntBinaryOperator | Det repræsenterer en operation på to operander af int-typen og returnerer et resultat af int-typen. |
IntConsumer | Det repræsenterer en operation, der accepterer et enkelt heltalsargument og ikke returnerer noget resultat. |
IntFunction | Det repræsenterer en funktion, der accepterer et heltalsargument og returnerer et resultat. |
Intprædikat | Det repræsenterer et prædikat (funktion med boolsk værdi) af et heltalsargument. |
IntSupplier | Det repræsenterer en leverandør af heltalstypen. |
IntToDoubleFunction | Det repræsenterer en funktion, der accepterer et heltalsargument og returnerer en dobbelt. |
IntToLongFunction | Det repræsenterer en funktion, der accepterer et heltalsargument og returnerer en lang. |
IntUnaryOperator | Det repræsenterer en operation på en enkelt heltalsoperand, der producerer et heltalsresultat. |
LongBinaryOperator | Det repræsenterer en operation på to lange type operander og returnerer en lang type resultat. |
Langforbruger | Det repræsenterer en operation, der accepterer et enkelt lang type argument og ikke returnerer noget resultat. |
Lang funktion | Det repræsenterer en funktion, der accepterer et lang type argument og returnerer et resultat. |
Langt Prædikat | Det repræsenterer et prædikat (funktion med boolsk værdi) af ét lang type argument. |
LongSupplier | Det repræsenterer en leverandør af lange typer resultater. |
LongToDoubleFunction | Det repræsenterer en funktion, der accepterer et lang type argument og returnerer et resultat af dobbelt type. |
LongToIntFunction | Den repræsenterer en funktion, der accepterer et lang type argument og returnerer et heltalsresultat. |
LongUnaryOperator | Det repræsenterer en operation på en enkelt lang type operand, der returnerer en lang type resultat. |
ObjDoubleConsumer | Det repræsenterer en operation, der accepterer et objekt og et dobbeltargument og ikke returnerer noget resultat. |
ObjIntConsumer | Det repræsenterer en operation, der accepterer et objekt og et heltalsargument. Det giver ikke resultat. |
ObjLongConsumer | Det repræsenterer en operation, der accepterer et objekt og et langt argument, det returnerer intet resultat. |
Leverandør | Det repræsenterer en leverandør af resultater. |
ToDoubleBiFunction | Det repræsenterer en funktion, der accepterer to argumenter og producerer et resultat med dobbelt type. |
ToDoubleFunction | Det repræsenterer en funktion, der returnerer et resultat af dobbelt type. |
ToIntBiFunction | Det repræsenterer en funktion, der accepterer to argumenter og returnerer et heltal. |
ToIntFunction | Det repræsenterer en funktion, der returnerer et heltal. |
ToLongBiFunction | Det repræsenterer en funktion, der accepterer to argumenter og returnerer et resultat af lang type. |
ToLongFunction | Det repræsenterer en funktion, der returnerer et resultat af lang type. |
UnaryOperator | Det repræsenterer en operation på en enkelt operand, der returnerer et resultat af samme type som dens operand. |