logo

واجهات جافا الوظيفية

تُعرف الواجهة التي تحتوي على طريقة مجردة واحدة بالضبط بالواجهة الوظيفية. يمكن أن تحتوي على أي عدد من الأساليب الافتراضية والثابتة، ولكنها يمكن أن تحتوي على طريقة مجردة واحدة فقط. ويمكنه أيضًا الإعلان عن أساليب فئة الكائن.

تُعرف الواجهة الوظيفية أيضًا باسم واجهات الطريقة المجردة الفردية أو واجهات 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 وهو يمثل عملية على معامل واحد يُرجع نتيجة من نفس نوع المعامل الخاص به.