Nguồn: DZone Dưới đây là tổng quan về các giao diện chức năng trong Java: mục đích, ví dụ, biểu thức lambda và danh sách các giao diện được xác định trước. Là ngôn ngữ lập trình hướng đối tượng, Java trước đây không thể có các chức năng độc lập vì mọi thứ ngoại trừ một số kiểu dữ liệu và phương thức nguyên thủy trong ngôn ngữ đều xoay quanh các lớp và đối tượng. Tuy nhiên, Java 8 đã giới thiệu một khái niệm mới gọi là Giao diện chức năng và một số tính năng khác như Biểu thức Lambda, API thời gian, API luồng, v.v. Các giao diện chức năng này là gì và làm thế nào để xác định chúng? Hãy cùng tìm hiểu!
Giao diện là gì?
Giao diện là một tập hợp các quy tắc xác định sự tương tác của các thành phần hệ thống. Nó còn được gọi là bản phác thảo của một lớp chứa các phương thức trừu tượng và các hằng tĩnh. Một giao diện có thể chứa một hoặc nhiều phương thức trừu tượng. Các giao diện cũng cho phép bạn đặt ra các yêu cầu cho các lớp, tức là các phương thức nào được yêu cầu từ lớp đó. Nói một cách đơn giản, một giao diện giống như một hợp đồng phải được mọi lớp triển khai tuân thủ. Đây là một ví dụ:Interface A1
{
void method1();
String method2(String X);
}
Class A1 implements A
{
@Override
public void method1(){}
@Override
public String method2(String X) { return x; }
}
Nếu lớp triển khai giao diện không khai báo tất cả các phương thức của giao diện, mã sẽ không chạy và sẽ phát sinh lỗi: “ error: A1 is not abstract and not write đè phương thức trừu tượng trong A1. " (lỗi: A1 không trừu tượng và không ghi đè phương thức trừu tượng trong A1). Trước JDK 8, các giao diện không thể xác định cách triển khai, nhưng giờ đây các cách triển khai mặc định có thể được thêm vào cho các phương thức giao diện. Chúng ta cũng có thể định nghĩa các phương thức tĩnh và mặc định, trong đó có thể gọi mà không cần có đối tượng trong giao diện. Giao diện chủ yếu được sử dụng để đạt được tính đa kế thừa và khớp nối lỏng lẻo trong mã. Bây giờ chúng ta đã hiểu rõ về giao diện, hãy xem giao diện chức năng là gì và nó hoạt động như thế nào.
Giao diện chức năng là gì?
Giao diện chức năng còn được gọi là giao diện Phương thức trừu tượng đơn (SAM). Như tên cho thấy, nó có thể có nhiều nhất một phương thức trừu tượng. Một giao diện chức năng có thể có một số phương thức tĩnh và mặc định cùng với cách triển khai cũng như một phương thức trừu tượng bổ sung. Để đánh dấu một giao diện là có chức năng, chú thích @FunctionalInterface được sử dụng . Cần tránh khai báo sai các phương thức bổ sung. Điều làm cho giao diện chức năng trở nên phổ biến là khả năng sử dụng biểu thức lambda để tạo giao diện mà không cần sử dụng các triển khai lớp ẩn danh và rườm rà. Việc sử dụng từ khóa trừu tượng trong các giao diện chức năng là tùy chọn vì các phương thức được xác định trong một giao diện theo mặc định là trừu tượng.Biểu thức lambda là gì?
Biểu thức lambda là một phương thức ẩn danh hoặc ẩn danh, không tự thực thi mà được sử dụng để triển khai một số phương thức nhất định của giao diện chức năng. Nó được định nghĩa như sau:(parameter list) -> lambda body
Toán tử mũi tên ( -> ) bạn thấy trong mã được gọi là toán tử lambda. Ví dụ: nếu chúng ta có phương thức sau:
double getGoldenRatioValue() {
return 1.61803;
}
Sử dụng biểu thức lambda, chúng ta có thể viết nó như thế này:
() -> 1.61803
Như bạn có thể thấy, phương thức trong hàm lambda không có tham số nên phía bên trái của câu lệnh trống. Vì phía bên phải xác định hành động nên trong ví dụ này nó sẽ trả về giá trị của tỷ lệ vàng: 1,61803. Trước Java 8, việc triển khai các giao diện hoặc tạo các đối tượng lớp bên trong là rất quan trọng, nhưng với Java 8, tất cả những gì chúng ta cần làm bây giờ là gán các biểu thức lambda cho các giao diện chức năng.
Ví dụ về giao diện chức năng
Để tạo các giao diện chức năng, bạn có thể sử dụng chú thích @FunctionalInterface hoặc sử dụng các giao diện chức năng được xác định trước của Java.ví dụ 1
- Đầu tiên, chúng ta sẽ gắn thẻ @FunctionalInterface và tạo một giao diện có tên MyInterface được gọi bằng phương thức getGoldenRationValue() trừu tượng .
- Sau đó chúng ta sẽ tạo một public class main để thực thi phương thức.
- Để sử dụng biểu thức lambda trong giao diện chức năng, chúng ta sẽ khai báo một tham chiếu đến MyInterfaceDemo rồi gán biểu thức lambda cho tham chiếu đó.
- Cuối cùng, chúng ta sẽ in ra giá trị tỷ lệ vàng bằng giao diện tham chiếu.
import java.lang.FunctionalInterface;
// Creation и маркировка функционального интерфейса
@FunctionalInterface
interface MyInterface {
// Это абстрактный метод
double getGoldenRatioValue();
}
public class Main {
public static void main( String[] args ) {
//декларируем ссылку на функциональный интерфейс
MyInterface ref;
//используем Lambda Expression
ref = () -> 1.61803;
System.out.println("Value of Golden Ratio = " + ref.getGoldenRatioValue());
}
}
Phần kết luận:
Giá trị của Tỷ lệ vàng = 1,61803
Ví dụ 2
- Trong ví dụ này, chúng ta sẽ sử dụng giao diện hàm được xác định trước ToDoubleFunction , hàm này nhận đối số T và trả về kết quả là double .
- ToDoubleFuntion chứa một phương thức trừu tượng được gọi là applyasDouble() .
- Cuối cùng, chúng tôi in toàn bộ chiều dài của tin nhắn, bao gồm cả dấu cách.
import java.util.function.ToDoubleFunction;
public class MyInterface2 {
public static void main(String[] args) {
ToDoubleFunction<String> length = x -> x.length();
System.out.println(length.applyAsDouble("This is an example of predefined functional interface."));
}
}
Phần kết luận:
54,0
Danh sách các giao diện chức năng được cài đặt sẵn
Bây giờ chúng ta đã biết cách xác định các giao diện chức năng, hãy xem có bao nhiêu giao diện chức năng được xác định trước (tích hợp sẵn). Có 4 loại giao diện chức năng chính có thể được triển khai trong các tình huống khác nhau: Người tiêu dùng , Vị ngữ , Chức năng và Nhà cung cấp . Trong số 4 giao diện này, Consumer , Function và Predicate có thêm các giao diện chức năng. Đây là danh sách tất cả các giao diện tích hợp hoặc được xác định trước trong Java. Ghi chú. T, U và R được đề cập trong bảng bên dưới lần lượt thể hiện loại đối số thứ nhất (T), đối số thứ hai (U) và kết quả (R) của thao tác.Hãy tóm tắt lại
Một số điểm chính cần nhớ từ bài đăng này:- Giao diện hoạt động như một cơ chế trừu tượng.
- Một giao diện chức năng có thể có một số phương thức tĩnh và mặc định cùng với cách triển khai cũng như một phương thức trừu tượng bổ sung.
- Các phương thức được xác định bên trong một giao diện chức năng theo mặc định là trừu tượng, vì vậy việc sử dụng từ khóa abstract không còn cần thiết nữa.
- Biểu thức lambda là một phương thức ẩn danh không tự thực thi mà được sử dụng để triển khai một số phương thức nhất định của giao diện chức năng.
- Để tạo các giao diện chức năng, bạn có thể sử dụng chú thích @FunctionalInterface hoặc sử dụng các giao diện chức năng được xác định trước của Java.
GO TO FULL VERSION