Интерфейс, който съдържа точно един абстрактен метод, е известен като функционален интерфейс. Може да има произволен брой статични методи по подразбиране, но може да съдържа само един абстрактен метод. Може също така да декларира методи на обектен клас.
Функционалният интерфейс е известен също като интерфейси с единичен абстрактен метод или SAM интерфейси. Това е нова функция в Java, която помага за постигане на подход на функционално програмиране.
размер на текст латекс
Пример 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'); } }Тествайте сега
Изход:
Hello there
Един функционален интерфейс може да има методи от клас обекти. Вижте в следния пример.
Пример 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'); } }Тествайте сега
Изход:
Hello there
Невалиден функционален интерфейс
Един функционален интерфейс може да разшири друг интерфейс само когато няма абстрактен метод.
interface sayable{ void say(String msg); // abstract method } @FunctionalInterface interface Doable extends sayable{ // Invalid '@FunctionalInterface' annotation; Doable is not a functional interface void doIt(); }
Изход:
compile-time error
Пример 3
В следващия пример функционален интерфейс се разширява към нефункционален интерфейс.
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(); } }Тествайте сега
Изход:
блокирани номера
Hello there Do it now
Предварително дефинирани функционални интерфейси на Java
Java предоставя предварително дефинирани функционални интерфейси за справяне с функционалното програмиране чрез използване на ламбда и препратки към методи.
Можете също да дефинирате свой персонализиран функционален интерфейс. Следва списъкът с функционален интерфейс, който е поставен в пакета java.util.function.
Интерфейс | Описание |
---|---|
BiConsumer | Той представлява операция, която приема два входни аргумента и не връща резултат. |
Консуматор | Той представлява операция, която приема един аргумент и не връща резултат. |
функция | Той представлява функция, която приема един аргумент и връща резултат. |
Предикат | Той представлява предикат (функция с булева стойност) на един аргумент. |
BiFunction | Той представлява функция, която приема два аргумента и връща резултат. |
Двоичен оператор | Той представлява операция върху два операнда от един и същи тип данни. Той връща резултат от същия тип като операндите. |
BiPredicate | Той представлява предикат (функция с булева стойност) от два аргумента. |
BooleanSupplier | Той представлява доставчик на резултати с булеви стойности. |
DoubleBinaryOperator | Той представлява операция върху два операнда от двоен тип и връща стойност от двоен тип. |
DoubleConsumer | Той представлява операция, която приема един аргумент от двоен тип и не връща резултат. |
DoubleFunction | Той представлява функция, която приема аргумент от двоен тип и произвежда резултат. |
DoublePredicate | Той представлява предикат (функция с булева стойност) на един аргумент от двоен тип. |
DoubleSupplier | Представлява доставчик на резултати от двоен тип. |
DoubleToIntFunction | Той представлява функция, която приема аргумент от двоен тип и произвежда резултат от тип int. |
DoubleToLongFunction | Той представлява функция, която приема аргумент от двоен тип и произвежда резултат от дълъг тип. |
DoubleUnaryOperator | Той представлява операция върху един единствен операнд от двоен тип, която произвежда резултат от двоен тип. |
IntBinaryOperator | Той представлява операция върху два операнда тип int и връща резултат от тип int. |
IntConsumer | Той представлява операция, която приема един аргумент като цяло число и не връща резултат. |
IntFunction | Той представлява функция, която приема целочислен аргумент и връща резултат. |
IntPredicate | Той представлява предикат (функция с булева стойност) на един целочислен аргумент. |
IntSupplier | Той представлява доставчик от целочислен тип. |
IntToDoubleFunction | Той представлява функция, която приема целочислен аргумент и връща двойно. |
IntToLongFunction | Той представлява функция, която приема целочислен аргумент и връща long. |
IntUnaryOperator | Той представлява операция върху единичен операнд с цяло число, който произвежда резултат с цяло число. |
LongBinaryOperator | Той представлява операция върху два операнда от дълъг тип и връща резултат от дълъг тип. |
LongConsumer | Той представлява операция, която приема един аргумент от дълъг тип и не връща резултат. |
LongFunction | Той представлява функция, която приема аргумент от дълъг тип и връща резултат. |
LongPredicate | Той представлява предикат (функция с булева стойност) на един аргумент от дълъг тип. |
LongSupplier | Представлява доставчик на резултати от дълъг тип. |
LongToDoubleFunction | Той представлява функция, която приема аргумент от дълъг тип и връща резултат от двоен тип. |
LongToIntFunction | Той представлява функция, която приема аргумент от дълъг тип и връща целочислен резултат. |
LongUnaryOperator | Той представлява операция върху един операнд от дълъг тип, който връща резултат от дълъг тип. |
ObjDoubleConsumer | Той представлява операция, която приема обект и двоен аргумент и не връща резултат. |
ObjIntConsumer | Той представлява операция, която приема обект и целочислен аргумент. Не връща резултат. |
ObjLongConsumer | Представлява операция, която приема обект и дълъг аргумент, не връща резултат. |
Доставчик | Представлява доставчик на резултати. |
ToDoubleBiFunction | Той представлява функция, която приема два аргумента и произвежда резултат от двоен тип. |
ToDoubleFunction | Той представлява функция, която връща резултат от двоен тип. |
ToIntBiFunction | Той представлява функция, която приема два аргумента и връща цяло число. |
ToIntFunction | Той представлява функция, която връща цяло число. |
ToLongBiFunction | Представлява функция, която приема два аргумента и връща резултат от тип long. |
ToLongFunction | Той представлява функция, която връща резултат от тип long. |
Унарен оператор | Той представлява операция върху един операнд, която връща резултат от същия тип като неговия операнд. |