ממשק שמכיל בדיוק שיטה מופשטת אחת מכונה ממשק פונקציונלי. זה יכול להיות כל מספר של שיטות ברירת מחדל סטטיות אבל יכול להכיל רק שיטה מופשטת אחת. זה יכול גם להכריז על שיטות של מחלקת אובייקט.
ממשק פונקציונלי ידוע גם כ-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 | הוא מייצג פעולה על אופרנד בודד שמחזירה תוצאה מאותו סוג של האופרנד שלו. |