JavaRush /Блоги Java /Random-TG /Интерфейси функсионалии Java
Алексей
Сатҳи

Интерфейси функсионалии Java

Дар гурӯҳ нашр шудааст
Интерфейси функсионалӣ дар Java интерфейсест, ки танҳо 1 усули абстрактиро дар бар мегирад. Мақсади асосӣ истифодаи он дар ифодаҳои лямбда ва истинодҳои методӣ мебошад.
Интерфейсҳои функсионалии Java - 1
Мавҷудияти 1 усули абстрактӣ ягона шарт аст, бинобар ин интерфейси функсионалӣ инчунин метавонад defaultусулҳоро дар бар гирад static. Шумо метавонед шарҳи @FunctionalInterface-ро ба интерфейси функсионалӣ илова кунед. Ин талаб карда намешавад, аммо агар ин эзоҳ мавҷуд бошад, агар зиёда аз 1 усули абстрактӣ мавҷуд бошад, code тартиб дода намешавад. Тавсия дода мешавад, ки @FunctionalInterface илова кунед. Ин ба шумо имкон медиҳад, ки интерфейсро дар ифодаҳои лямбда бидуни хавотирӣ истифода баред, ки касе ба интерфейс усули нави абстрактӣ илова мекунад ва он функсионалии худро қатъ мекунад. Java дорои интерфейсҳои функсионалии дарунсохт, ки дар java.util.function. Ман ба таври муфассал дар бораи онҳо таваққуф намекунам. Ман қайд мекунам, ки бештар истифода мешаванд: Consumer<T> , Function<T,R> , Predicate<T> , Supplier<T> , UnaryOperator<T> ва шаклҳои Bi . Тафсилоти бештарро дар саҳифаи ҳуҷҷатҳо пайдо кардан мумкин аст: 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