تُعرف الواجهة التي تحتوي على طريقة مجردة واحدة بالضبط بالواجهة الوظيفية. يمكن أن تحتوي على أي عدد من الأساليب الافتراضية والثابتة، ولكنها يمكن أن تحتوي على طريقة مجردة واحدة فقط. ويمكنه أيضًا الإعلان عن أساليب فئة الكائن.
تُعرف الواجهة الوظيفية أيضًا باسم واجهات الطريقة المجردة الفردية أو واجهات 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.util.function.
واجهه المستخدم | وصف |
---|---|
BiConsumer | إنه يمثل عملية تقبل وسيطتين للإدخال ولا تُرجع أي نتيجة. |
مستهلك | إنه يمثل عملية تقبل وسيطة واحدة ولا تُرجع أي نتيجة. |
وظيفة | إنه يمثل دالة تقبل وسيطة واحدة وترجع النتيجة. |
فاعل | وهو يمثل مسندًا (دالة ذات قيمة منطقية) لوسيطة واحدة. |
وظيفة ثنائية | إنها تمثل دالة تقبل وسيطتين وترجع نتيجة. |
BinaryOperator | وهو يمثل عملية على معاملين من نفس نوع البيانات. تقوم بإرجاع نتيجة من نفس نوع المعاملات. |
BiPredicate | وهو يمثل مسندًا (دالة ذات قيمة منطقية) لوسيطين. |
BooleanSupplier | وهو يمثل موردًا للنتائج ذات القيمة المنطقية. |
DoubleBinaryOperator | إنه يمثل عملية على معاملين من النوع المزدوج ويقوم بإرجاع قيمة من النوع المزدوج. |
DoubleConsumer | إنه يمثل عملية تقبل وسيطة واحدة من النوع المزدوج ولا تُرجع أي نتيجة. |
وظيفة مزدوجة | إنه يمثل دالة تقبل وسيطة من النوع المزدوج وتنتج نتيجة. |
المسند المزدوج | وهو يمثل مسندًا (دالة ذات قيمة منطقية) لوسيطة واحدة من النوع المزدوج. |
DoubleSupplier | إنه يمثل موردًا لنتائج النوع المزدوج. |
DoubleToIntFunction | إنه يمثل دالة تقبل وسيطة من النوع المزدوج وتنتج نتيجة من النوع int. |
DoubleToLongFunction | إنه يمثل دالة تقبل وسيطة من النوع المزدوج وتنتج نتيجة من النوع الطويل. |
DoubleUnaryOperator | إنه يمثل عملية على معامل نوع مزدوج واحد ينتج عنه نتيجة نوع مزدوج. |
IntBinaryOperator | إنه يمثل عملية على معاملين من النوع int ويعيد نتيجة من النوع int. |
IntConsumer | إنه يمثل عملية تقبل وسيطة عددية واحدة ولا تُرجع أي نتيجة. |
وظيفة | إنه يمثل دالة تقبل وسيطة عدد صحيح وترجع نتيجة. |
IntPredicate | وهو يمثل مسندًا (دالة ذات قيمة منطقية) لوسيطة عددية واحدة. |
IntSupplier | إنه يمثل موردًا من النوع الصحيح. |
IntToDoubleFunction | إنه يمثل دالة تقبل وسيطة عدد صحيح وترجع رقمًا مزدوجًا. |
IntToLongFunction | إنه يمثل دالة تقبل وسيطة عددية وترجع قيمة طويلة. |
IntUnaryOperator | إنه يمثل عملية على معامل عدد صحيح واحد ينتج عنه نتيجة عدد صحيح. |
LongBinaryOperator | إنه يمثل عملية على معاملين من النوع الطويل ويعيد نتيجة من النوع الطويل. |
LongConsumer | إنه يمثل عملية تقبل وسيطة واحدة من النوع الطويل ولا تُرجع أي نتيجة. |
وظيفة طويلة | إنه يمثل دالة تقبل وسيطة من النوع الطويل وترجع النتيجة. |
المسند الطويل | وهو يمثل مسندًا (دالة ذات قيمة منطقية) لوسيطة واحدة من النوع الطويل. |
LongSupplier | إنه يمثل موردًا لنتائج النوع الطويل. |
وظيفة LongToDouble | إنه يمثل دالة تقبل وسيطة من النوع الطويل وترجع نتيجة من النوع المزدوج. |
LongToIntFunction | إنه يمثل دالة تقبل وسيطة من النوع الطويل وترجع نتيجة عددية. |
LongUnaryOperator | إنه يمثل عملية على معامل نوع طويل واحد يقوم بإرجاع نتيجة نوع طويل. |
ObjDoubleConsumer | وهو يمثل عملية تقبل كائنًا ووسيطة مزدوجة، ولا تُرجع أي نتيجة. |
ObjIntConsumer | وهو يمثل عملية تقبل كائنًا ووسيطة عددًا صحيحًا. ولا يرجع النتيجة. |
ObjLongConsumer | إنه يمثل عملية تقبل كائنًا ووسيطة طويلة، ولا تُرجع أي نتيجة. |
المورد | وهو يمثل المورد من النتائج. |
ToDoubleBiFunction | إنه يمثل دالة تقبل وسيطتين وتنتج نتيجة من النوع المزدوج. |
إلى وظيفة مزدوجة | إنه يمثل دالة تُرجع نتيجة من النوع المزدوج. |
ToIntBiFunction | إنها تمثل دالة تقبل وسيطتين وترجع عددًا صحيحًا. |
ToIntFunction | وهو يمثل دالة تقوم بإرجاع عدد صحيح. |
ToLongBiFunction | إنه يمثل دالة تقبل وسيطتين وترجع نتيجة من النوع الطويل. |
ToLongFunction | يمثل دالة تقوم بإرجاع نتيجة من النوع الطويل. |
UnaryOperator | وهو يمثل عملية على معامل واحد يُرجع نتيجة من نفس نوع المعامل الخاص به. |