logo

ממשקים פונקציונליים של Java

ממשק שמכיל בדיוק שיטה מופשטת אחת מכונה ממשק פונקציונלי. זה יכול להיות כל מספר של שיטות ברירת מחדל סטטיות אבל יכול להכיל רק שיטה מופשטת אחת. זה יכול גם להכריז על שיטות של מחלקת אובייקט.

ממשק פונקציונלי ידוע גם כ-Single Abstract Method Interfaces או SAM Interfaces. זוהי תכונה חדשה ב-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 הוא מייצג פונקציה שמקבלת שני ארגומנטים ומחזירה תוצאה.
BinaryOperator הוא מייצג פעולה על שני אופרנדים מאותו סוג נתונים. הוא מחזיר תוצאה מאותו סוג של האופרנדים.
BiPredicate הוא מייצג פרדיקט (פונקציה בעלת ערך בוליאני) של שני ארגומנטים.
Boolean Supplier הוא מייצג ספק של תוצאות בעלות ערך בוליאני.
DoubleBinaryOperator הוא מייצג פעולה על שני אופרנדים מסוג כפול ומחזיר ערך מסוג כפול.
DoubleConsumer הוא מייצג פעולה שמקבלת ארגומנט מסוג כפול יחיד ולא מחזירה תוצאה.
Double Function הוא מייצג פונקציה שמקבלת ארגומנט מסוג כפול ומייצרת תוצאה.
DoublePredicate הוא מייצג פרדיקט (פונקציה בעלת ערך בוליאני) של ארגומנט מסוג כפול אחד.
DoubleSupplier הוא מייצג ספק של תוצאות מסוג כפול.
DoubleToIntFunction הוא מייצג פונקציה שמקבלת ארגומנט מסוג כפול ומייצרת תוצאה מסוג int.
DoubleToLongFunction הוא מייצג פונקציה שמקבלת ארגומנט מסוג כפול ומייצרת תוצאת סוג ארוך.
DoubleUnaryOperator הוא מייצג פעולה על אופרנד מסוג כפול יחיד שמייצרת תוצאה מסוג כפול.
IntBinaryOperator הוא מייצג פעולה על שני אופרנדים מסוג int ומחזיר תוצאה מסוג int.
IntConsumer הוא מייצג פעולה שמקבלת ארגומנט מספר שלם בודד ולא מחזירה תוצאה.
IntFunction הוא מייצג פונקציה שמקבלת ארגומנט של מספר שלם ומחזירה תוצאה.
IntPredicate הוא מייצג פרדיקט (פונקציה בעלת ערך בוליאני) של ארגומנט מספר שלם אחד.
IntSupplier הוא מייצג ספק מסוג מספר שלם.
IntToDoubleFunction הוא מייצג פונקציה שמקבלת ארגומנט של מספר שלם ומחזירה כפולה.
IntToLongFunction היא מייצגת פונקציה שמקבלת ארגומנט של מספר שלם ומחזירה long.
IntUnaryOperator הוא מייצג פעולה על אופרנד של מספר שלם יחיד שמייצרת תוצאה של מספר שלם.
LongBinaryOperator הוא מייצג פעולה על שני אופרנדים מסוג ארוך ומחזיר תוצאת סוג ארוך.
LongConsumer הוא מייצג פעולה שמקבלת ארגומנט מסוג ארוך בודד ולא מחזירה תוצאה.
Long Function הוא מייצג פונקציה שמקבלת ארגומנט מסוג ארוך ומחזירה תוצאה.
LongPredicate הוא מייצג פרדיקט (פונקציה בעלת ערך בוליאני) של ארגומנט מסוג ארוך אחד.
LongSupplier הוא מייצג ספק של תוצאות מסוג ארוך.
LongToDoubleFunction היא מייצגת פונקציה שמקבלת ארגומנט סוג ארוך ומחזירה תוצאה מסוג כפול.
LongToIntFunction הוא מייצג פונקציה שמקבלת ארגומנט מסוג ארוך ומחזירה תוצאה של מספר שלם.
LongUnaryOperator הוא מייצג פעולה על אופרנד מסוג ארוך יחיד המחזיר תוצאת סוג ארוך.
ObjDoubleConsumer הוא מייצג פעולה שמקבלת אובייקט וארגומנט כפול, ולא מחזירה תוצאה.
ObjIntConsumer הוא מייצג פעולה שמקבלת אובייקט וארגומנט של מספר שלם. זה לא מחזיר תוצאה.
ObjLongConsumer זה מייצג פעולה שמקבלת אובייקט וטיעון ארוך, זה לא מחזיר תוצאה.
ספק הוא מייצג ספק של תוצאות.
ToDoubleBiFunction הוא מייצג פונקציה שמקבלת שני ארגומנטים ומייצרת תוצאה מסוג כפול.
ToDoubleFunction הוא מייצג פונקציה שמחזירה תוצאה מסוג כפול.
ToIntBiFunction הוא מייצג פונקציה שמקבלת שני ארגומנטים ומחזירה מספר שלם.
ToIntFunction הוא מייצג פונקציה שמחזירה מספר שלם.
ToLongBiFunction הוא מייצג פונקציה שמקבלת שני ארגומנטים ומחזירה תוצאה מסוג ארוך.
ToLongFunction הוא מייצג פונקציה שמחזירה תוצאה מסוג ארוך.
UnaryOperator הוא מייצג פעולה על אופרנד בודד שמחזירה תוצאה מאותו סוג של האופרנד שלו.