JavaRush /Java blogi /Random-UZ /Java funktsional interfeyslari

Java funktsional interfeyslari

Guruhda nashr etilgan
Java tilidagi funksional interfeys faqat 1 mavhum usulni o'z ichiga olgan interfeysdir. Asosiy maqsad uni lambda iboralarida va usul havolalarida ishlatishdir.
Java funksional interfeyslari - 1
1 ta mavhum usulning mavjudligi yagona shart, shuning uchun funktsional interfeys defaultusullarni ham o'z ichiga olishi mumkin static. Funktsional interfeysga @FunctionalInterface izohini qo'shishingiz mumkin. Bu shart emas, lekin agar bu izoh mavjud bo'lsa, 1 ta abstrakt usuldan ko'p yoki kamroq bo'lsa, kod kompilyatsiya qilinmaydi. @FunctionalInterface qo'shish tavsiya etiladi. Bu sizga kimdir interfeysga yangi mavhum usul qo'shishi va u funksionallikni to'xtatishidan xavotirlanmasdan lambda ifodalarida interfeysdan foydalanish imkonini beradi. Java-da joylashgan o'rnatilgan funktsional interfeyslarga ega java.util.function. Men ular haqida batafsil to'xtalmayman. Shuni ta'kidlaymanki, eng ko'p ishlatiladiganlar: Consumer<T> , Function<T,R> , Predicate<T> , Supplier<T> , UnaryOperator<T> va ularning Bi shakllari. Batafsil ma'lumotni hujjatlar sahifasida topishingiz mumkin: java.util.function paketi
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
    }
}
Biroq, Java tili spetsifikatsiyasida tasvirlangan bitta nozik nuqta borligi ma'lum bo'ldi: "interfeyslar Ob'ektdan meros bo'lmaydi, balki ob'ekt bilan bir xil usullarning ko'pchiligini bilvosita e'lon qiladi." Bu shuni anglatadiki, funktsional interfeyslar qo'shimcha ravishda sinfda belgilangan mavhum usullarni o'z ichiga olishi mumkin Object. Quyidagi kod amal qiladi, kompilyatsiya yoki ish vaqti xatosi bo'lmaydi:
@FunctionalInterface
public interface Comparator<T> {
   int compare(T o1, T o2);
   boolean equals(Object obj);
   // другие default or static методы
}
Suhbat davomida ehtiyot bo'ling! Omad!
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION