JavaRush /Java Blogu /Random-AZ /Java funksional interfeysləri
Алексей
Səviyyə

Java funksional interfeysləri

Qrupda dərc edilmişdir
Java-da funksional interfeys yalnız 1 mücərrəd metoddan ibarət interfeysdir. Əsas məqsəd onu lambda ifadələrində və metod istinadlarında istifadə etməkdir.
Java funksional interfeysləri - 1
1 mücərrəd metodun olması yeganə şərtdir, ona görə də funksional interfeysdə defaultmetodlar da ola bilər static. Funksional interfeysə @FunctionalInterface annotasiyasını əlavə edə bilərsiniz. Bu tələb olunmur, lakin bu annotasiya varsa, 1 abstrakt metoddan çox və ya az olduqda kod tərtib edilməyəcək. @FunctionalInterface əlavə etmək tövsiyə olunur. Bu, kiminsə interfeysə yeni mücərrəd metod əlavə edəcəyindən və onun funksionallığını dayandıracağından narahat olmadan lambda ifadələrində interfeysdən istifadə etməyə imkan verəcək. Java-da quraşdırılmış funksional interfeyslərə malikdir java.util.function. Onların üzərində ətraflı dayanmayacağam. Qeyd edim ki, ən çox istifadə olunanlar bunlardır: Consumer<T> , Function<T,R> , Predicate<T> , Supplier<T> , UnaryOperator<T> və onların Bi formaları. Ətraflı məlumatı sənədlər səhifəsində tapa bilərsiniz: Paket 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
    }
}
Lakin belə çıxır ki, Java Dilinin Spesifikasiyasında təsvir olunan bir incə məqam var: “interfeyslər Obyektdən miras qalmır, əksinə Obyektlə eyni metodların çoxunu dolayısı ilə bəyan edirlər”. Bu o deməkdir ki, funksional interfeyslər əlavə olaraq sinifdə müəyyən edilmiş abstrakt metodları ehtiva edə bilər Object. Aşağıdakı kod etibarlıdır, kompilyasiya və ya icra zamanı xətaları olmayacaq:
@FunctionalInterface
public interface Comparator<T> {
   int compare(T o1, T o2);
   boolean equals(Object obj);
   // другие default or static методы
}
Müsahibə zamanı diqqətli olun! Uğurlar!
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION