Rozhraní, které obsahuje přesně jednu abstraktní metodu, se nazývá funkční rozhraní. Může mít libovolný počet výchozích statických metod, ale může obsahovat pouze jednu abstraktní metodu. Může také deklarovat metody třídy objektů.
Funkční rozhraní je také známé jako Single Abstract Method Interfaces nebo SAM Interfaces. Je to nová funkce v Javě, která pomáhá dosáhnout funkčního programování.
Příklad 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'); } }Otestujte to hned
Výstup:
Hello there
Funkční rozhraní může mít metody třídy objektů. Viz následující příklad.
Příklad 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'); } }Otestujte to hned
Výstup:
Hello there
Neplatné funkční rozhraní
Funkční rozhraní může rozšířit další rozhraní pouze v případě, že nemá žádnou abstraktní metodu.
interface sayable{ void say(String msg); // abstract method } @FunctionalInterface interface Doable extends sayable{ // Invalid '@FunctionalInterface' annotation; Doable is not a functional interface void doIt(); }
Výstup:
compile-time error
Příklad 3
V následujícím příkladu se funkční rozhraní rozšiřuje na nefunkční rozhraní.
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(); } }Otestujte to hned
Výstup:
Hello there Do it now
Předdefinovaná funkční rozhraní Java
Java poskytuje předdefinovaná funkční rozhraní pro práci s funkčním programováním pomocí lambda a referencí metod.
Můžete také definovat své vlastní funkční rozhraní. Následuje seznam funkčních rozhraní, která jsou umístěna v balíčku java.util.function.
Rozhraní | Popis |
---|---|
BiConsumer | Představuje operaci, která přijímá dva vstupní argumenty a nevrací žádný výsledek. |
Spotřebitel | Představuje operaci, která přijímá jediný argument a nevrací žádný výsledek. |
Funkce | Představuje funkci, která přijímá jeden argument a vrací výsledek. |
Predikát | Představuje predikát (funkci s logickou hodnotou) jednoho argumentu. |
BiFunction | Představuje funkci, která přijímá dva argumenty a vrací výsledek. |
Binární operátor | Představuje operaci na dvou operandech stejného datového typu. Vrací výsledek stejného typu jako operandy. |
BiPredicate | Představuje predikát (funkci s logickou hodnotou) dvou argumentů. |
BooleanSupplier | Představuje dodavatele výsledků s booleovskou hodnotou. |
DoubleBinaryOperator | Představuje operaci se dvěma operandy dvojitého typu a vrací hodnotu typu double. |
DoubleConsumer | Představuje operaci, která přijímá jediný argument dvojitého typu a nevrací žádný výsledek. |
DoubleFunction | Představuje funkci, která přijímá argument dvojitého typu a vytváří výsledek. |
DoublePredicate | Představuje predikát (funkce s booleovskou hodnotou) jednoho argumentu dvojitého typu. |
DoubleSupplier | Představuje dodavatele výsledků dvojího typu. |
DoubleToIntFunction | Představuje funkci, která přijímá argument dvojitého typu a vytváří výsledek typu int. |
DoubleToLongFunction | Představuje funkci, která přijímá argument dvojitého typu a vytváří výsledek dlouhého typu. |
DoubleUnaryOperator | Představuje operaci s jedním operandem dvojího typu, která vytváří výsledek dvojího typu. |
IntBinaryOperator | Představuje operaci se dvěma operandy typu int a vrací výsledek typu int. |
IntConsumer | Představuje operaci, která přijímá jediný celočíselný argument a nevrací žádný výsledek. |
IntFunction | Představuje funkci, která přijímá celočíselný argument a vrací výsledek. |
IntPredicate | Představuje predikát (funkce s booleovskou hodnotou) jednoho celočíselného argumentu. |
IntSupplier | Představuje dodavatele celočíselného typu. |
IntToDoubleFunction | Představuje funkci, která přijímá celočíselný argument a vrací double. |
IntToLongFunction | Představuje funkci, která přijímá celočíselný argument a vrací long. |
IntUnaryOperator | Představuje operaci s jedním celočíselným operandem, která vytváří celočíselný výsledek. |
LongBinaryOperator | Představuje operaci se dvěma operandy dlouhého typu a vrací výsledek dlouhého typu. |
LongConsumer | Představuje operaci, která přijímá jediný argument dlouhého typu a nevrací žádný výsledek. |
LongFunction | Představuje funkci, která přijímá argument dlouhého typu a vrací výsledek. |
LongPredicate | Představuje predikát (funkce s booleovskou hodnotou) jednoho dlouhého argumentu typu. |
LongSupplier | Představuje dodavatele výsledků dlouhého typu. |
LongToDoubleFunction | Představuje funkci, která přijímá argument dlouhého typu a vrací výsledek typu double. |
LongToIntFunction | Představuje funkci, která přijímá argument dlouhého typu a vrací celočíselný výsledek. |
LongUnaryOperator | Představuje operaci s jedním operandem dlouhého typu, který vrací výsledek typu long. |
ObjDoubleConsumer | Představuje operaci, která přijímá objekt a dvojitý argument a nevrací žádný výsledek. |
ObjIntConsumer | Představuje operaci, která přijímá objekt a celočíselný argument. Nevrací výsledek. |
ObjLongConsumer | Představuje operaci, která přijímá objekt a dlouhý argument, nevrací žádný výsledek. |
Dodavatel | Představuje dodavatele výsledků. |
ToDoubleBiFunction | Představuje funkci, která přijímá dva argumenty a vytváří výsledek dvojitého typu. |
ToDoubleFunction | Představuje funkci, která vrací výsledek dvojitého typu. |
ToIntBiFunction | Představuje funkci, která přijímá dva argumenty a vrací celé číslo. |
ToIntFunction | Představuje funkci, která vrací celé číslo. |
ToLongBiFunction | Představuje funkci, která přijímá dva argumenty a vrací výsledek typu long. |
ToLongFunction | Představuje funkci, která vrací výsledek typu long. |
UnaryOperator | Představuje operaci s jedním operandem, která vrací výsledek stejného typu jako jeho operand. |