JavaRush /Blog Java /Random-VI /Giao diện chức năng Java
Алексей
Mức độ

Giao diện chức năng Java

Xuất bản trong nhóm
Giao diện chức năng trong Java là giao diện chỉ chứa 1 phương thức trừu tượng. Mục đích chính là sử dụng nó trong các biểu thức lambda và tham chiếu phương thức.
Giao diện chức năng Java - 1
Sự hiện diện của 1 phương thức trừu tượng là điều kiện duy nhất, vì vậy một giao diện chức năng cũng có thể chứa defaultcác phương thức static. Bạn có thể thêm chú thích @FunctionalInterface vào giao diện chức năng. Điều này là không bắt buộc, nhưng nếu có chú thích này, mã sẽ không biên dịch nếu có nhiều hơn hoặc ít hơn 1 phương thức trừu tượng. Nên thêm @FunctionalInterface. Điều này sẽ cho phép bạn sử dụng giao diện trong biểu thức lambda mà không phải lo lắng rằng ai đó sẽ thêm một phương thức trừu tượng mới vào giao diện và nó sẽ ngừng hoạt động. Java có các giao diện chức năng tích hợp sẵn trong java.util.function. Tôi sẽ không tập trung vào chúng một cách chi tiết. Tôi lưu ý rằng được sử dụng thường xuyên nhất là: Consumer<T> , Function<T,R> , Predicate<T> , Nhà cung cấp<T> , UnaryOperator<T> và các dạng Bi của chúng . Bạn có thể tìm thêm thông tin chi tiết trên trang tài liệu: Gói 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
    }
}
Nhưng hóa ra có một điểm tinh tế được mô tả trong Đặc tả ngôn ngữ Java: “các giao diện không kế thừa từ Object, mà ngầm khai báo nhiều phương thức giống như Object”. Điều này có nghĩa là các giao diện chức năng có thể chứa thêm các phương thức trừu tượng được định nghĩa trong lớp Object. Mã bên dưới là hợp lệ, sẽ không có lỗi biên dịch hoặc thời gian chạy:
@FunctionalInterface
public interface Comparator<T> {
   int compare(T o1, T o2);
   boolean equals(Object obj);
   // другие default or static методы
}
Hãy cẩn thận khi phỏng vấn! Chúc may mắn!
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION