Java tilidagi funksional interfeys faqat 1 mavhum usulni o'z ichiga olgan interfeysdir. Asosiy maqsad uni lambda iboralarida va usul havolalarida ishlatishdir.
1 ta mavhum usulning mavjudligi yagona shart, shuning uchun funktsional interfeys
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
default
usullarni 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
.
Yana nimani o'qish kerak: |
---|
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!
GO TO FULL VERSION