JavaRush /בלוג Java /Random-HE /ממשקים פונקציונליים של Java
Алексей
רָמָה

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

פורסם בקבוצה
ממשק פונקציונלי ב-Java הוא ממשק המכיל רק שיטה אבסטרקטית אחת. המטרה העיקרית היא להשתמש בו בביטויי למבדה והפניות לשיטה.
ממשקים פונקציונליים של Java - 1
הנוכחות של שיטה מופשטת אחת היא התנאי היחיד, כך שממשק פונקציונלי יכול להכיל גם defaultשיטות static. אתה יכול להוסיף את ההערה @FunctionalInterface לממשק פונקציונלי. זה לא נדרש, אבל אם ההערה הזו קיימת, הקוד לא יקמפל אם יש יותר או פחות מתודה מופשטת אחת. מומלץ להוסיף את @FunctionalInterface. זה יאפשר לך להשתמש בממשק בביטויי למבדה מבלי לדאוג שמישהו יוסיף שיטה מופשטת חדשה לממשק והיא תפסיק להיות פונקציונלית. ל-Java יש ממשקים פונקציונליים מובנים הנמצאים ב- java.util.function. לא אתעכב עליהם בפירוט. אני מציין שהשימושים הנפוצים ביותר הם: Consumer<T> , Function<T,R> , Predicate<T> , Supplier<T> , UnaryOperator<T> וצורות הבי שלהם . פרטים נוספים ניתן למצוא בעמוד התיעוד: Package java.util.function
import java.util.function.Predicate;

//Определяем свой функциональный интерфейс
@FunctionalInterface
interface MyPredicate {
    boolean test(Integer value);
}

public class Tester {
    public static void main(String[] args) throws Exception {
        MyPredicate myPredicate = x -> x > 0;
        System.out.println(myPredicate.test(10));   //true

        //Аналогично, но используется встроенный функциональный интерфейс java.util.function.Predicate
        Predicate<Integer> predicate = x -> x > 0;
        System.out.println(predicate.test(-10));    //false
    }
}
אבל מסתבר שיש נקודה עדינה אחת המתוארת במפרט שפת Java: "ממשקים אינם יורשים מאובייקט, אלא מכריזים באופן מרומז על רבות מאותן שיטות כמו אובייקט." המשמעות היא שממשקים פונקציונליים יכולים להכיל בנוסף שיטות מופשטות המוגדרות במחלקה Object. הקוד שלהלן חוקי, לא יהיו שגיאות קומפילציה או זמן ריצה:
@FunctionalInterface
public interface Comparator<T> {
   int compare(T o1, T o2);
   boolean equals(Object obj);
   // другие default or static методы
}
היזהר במהלך הראיון! בהצלחה!
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION