JavaRush /Blog Java /Random-MS /Antara muka berfungsi Java

Antara muka berfungsi Java

Diterbitkan dalam kumpulan
Antara muka berfungsi dalam Java ialah antara muka yang mengandungi hanya 1 kaedah abstrak. Tujuan utama adalah untuk menggunakannya dalam ungkapan lambda dan rujukan kaedah.
Antara muka berfungsi Java - 1
Kehadiran 1 kaedah abstrak adalah satu-satunya syarat, jadi antara muka berfungsi juga boleh mengandungi defaultkaedah static. Anda boleh menambah anotasi @FunctionalInterface pada antara muka berfungsi. Ini tidak diperlukan, tetapi jika anotasi ini ada, kod tidak akan dikompil jika terdapat lebih atau kurang daripada 1 kaedah abstrak. Adalah disyorkan untuk menambah @FunctionalInterface. Ini akan membolehkan anda menggunakan antara muka dalam ungkapan lambda tanpa bimbang seseorang akan menambah kaedah abstrak baharu pada antara muka dan ia tidak lagi berfungsi. Java mempunyai antara muka berfungsi terbina dalam yang ditempatkan dalam java.util.function. Saya tidak akan membincangkannya secara terperinci. Saya perhatikan bahawa yang paling kerap digunakan ialah: Consumer<T> , Function<T,R> , Predicate<T> , Supplier<T> , UnaryOperator<T> dan borang Bi mereka . Butiran lanjut boleh didapati di halaman dokumentasi: Pakej 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
    }
}
Tetapi ternyata terdapat satu perkara halus yang diterangkan dalam Spesifikasi Bahasa Java: "antara muka tidak mewarisi dari Objek, tetapi secara tersirat mengisytiharkan banyak kaedah yang sama seperti Objek." Ini bermakna antara muka berfungsi tambahan boleh mengandungi kaedah abstrak yang ditakrifkan dalam kelas Object. Kod di bawah adalah sah, tidak akan ada kompilasi atau ralat masa jalan:
@FunctionalInterface
public interface Comparator<T> {
   int compare(T o1, T o2);
   boolean equals(Object obj);
   // другие default or static методы
}
Berhati-hati semasa temuduga! Semoga berjaya!
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION