JavaRush /Java Blog /Random-TL /Mga functional na interface ng Java

Mga functional na interface ng Java

Nai-publish sa grupo
Ang functional na interface sa Java ay isang interface na naglalaman lamang ng 1 abstract na pamamaraan. Ang pangunahing layunin ay gamitin ito sa mga expression ng lambda at mga sanggunian sa pamamaraan.
Mga functional na interface ng Java - 1
Ang pagkakaroon ng 1 abstract na paraan ay ang tanging kundisyon, kaya ang isang functional na interface ay maaari ding maglaman ng defaultmga pamamaraan static. Maaari mong idagdag ang @FunctionalInterface annotation sa isang functional na interface. Hindi ito kinakailangan, ngunit kung naroroon ang anotasyong ito, hindi magko-compile ang code kung mayroong higit o mas mababa sa 1 abstract na paraan. Inirerekomenda na magdagdag ng @FunctionalInterface. Papayagan ka nitong gamitin ang interface sa mga expression ng lambda nang hindi nababahala na may magdaragdag ng bagong abstract na paraan sa interface at hindi na ito gagana. Ang Java ay may built-in na mga functional na interface na makikita sa java.util.function. Hindi ko na sila tatalakayin nang detalyado. Tandaan ko na ang pinakamadalas gamitin ay: Consumer<T> , Function<T,R> , Predicate<T> , Supplier<T> , UnaryOperator<T> at ang kanilang mga Bi form. Higit pang mga detalye ay matatagpuan sa pahina ng dokumentasyon: 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
    }
}
Ngunit lumalabas na mayroong isang banayad na punto na inilarawan sa Pagtutukoy ng Wika ng Java: "ang mga interface ay hindi nagmamana mula sa Bagay, ngunit sa halip ay implicit na idineklara ang marami sa parehong mga pamamaraan tulad ng Bagay." Nangangahulugan ito na ang mga functional na interface ay maaaring maglaman ng mga abstract na pamamaraan na tinukoy sa klase Object. Ang code sa ibaba ay wasto, walang mga compilation o runtime error:
@FunctionalInterface
public interface Comparator<T> {
   int compare(T o1, T o2);
   boolean equals(Object obj);
   // другие default or static методы
}
Mag-ingat sa panayam! Good luck!
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION