23 tháng 7 năm 2024 | Công nhà cái 888b Nghệ Thông Tin
Chúng ta đều biết rằng Java 8 là một cột mốc quan trọng trong lịch sử phát hành của Java. Dù phiên bản mới nhất của Java đã phát triển đến phiên bản 22, nhưng vẫn còn rất nhiều doanh nghiệp đang sử dụng Java 8. Có thể nói rằng Java 8 là nền tảng vững chắc cho sự phát triển nhanh chóng của các phiên bản Java sau này. Bài viết này sẽ tập trung xem xét các tính năng chính được giới thiệu trong Java 8.
!Java 8 sơ đồ các tính năng chính
(Sơ đồ các tính năng chính của Java 8)
1 Biểu thức Lambda
Biểu thức Lambda là một trong những tính năng quan trọng mà Java 8 đã giới thiệu. Nó cho phép truyền khối mã giống như tham số thông thường vào phương thức. Đồng thời, biểu thức Lambda làm cho cách viết lớp ẩn danh trở nên gọn gàng hơn.
Cú pháp của biểu thức Lambda như sau:
(tham_số) -> biểu_thức
Hoặc:
(tham_số) -> {câu_lệnh;}
Trong đó:
tham_số
chỉ định danh sách tham số của biểu thức Lambda. Danh sách này có thể rỗng hoặc chứa một hoặc nhiều tham số.->
là toán tử Lambda, nó phân chia giữa danh sách tham số và phần thân của biểu thức Lambda.biểu_thức
có thể là một biểu thức hoặc giá trị trả về của biểu thức Lambda.{ câu_lệnh; }
bao gồm phần thực thi của biểu thức Lambda, có thể là một câu lệnh đơn lẻ hoặc nhiều câu lệnh.
Mục đích chính của biểu thức Lambda là đơn giản hóa việc tạo các đối tượng giao diện chức năng (chỉ chứa một phương thức trừu tượng, có thể kiểm tra bằng chú thích @FunctionalInterface
).
Dưới đây là một ví dụ nhỏ để Pk16vn Bet minh họa cách sử dụng biểu thức Lambda.
Mã nguồn sau đây khai báo một giao diện chức năng MyInterface
, chỉ chứa một phương thức trừu tượng và được đánh dấu bằng chú thích @FunctionalInterface
:
// src/main/java/MyInterface.java
@FunctionalInterface
public interface MyInterface {
// Phương thức trừu tượng
void print(String str);
// Phương thức mặc định
default int version() {
return 1;
}
// Phương thức tĩnh
static String info() {
return "functional interface test";
}
}
Lưu ý rằng để đáp ứng định nghĩa của giao diện chức năng, bên trong chỉ có thể chứa một phương thức trừu tượng, nhưng không hạn chế số lượng phương thức mặc định hoặc phương thức tĩnh. Hơn nữa, chú thích @FunctionalInterface
chỉ dùng để kiểm tra xem giao diện có thỏa mãn định nghĩa hay không, không bắt buộc phải sử dụng.
Dưới đây là đoạn mã lần lượt sử dụng lớp nội bộ ẩn danh và biểu thức Lambda để tạo các đối tượng giao diện chức năng:
// src/main/java/LambdaFeatureTest.java
public class LambdaFeatureTest {
public static void main(String[] args) {
// Sử dụng lớp nội bộ ẩn danh để tạo đối tượng giao diện Runnable
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("một luồng mới đã bắt đầu!");
}
}).start();
// Sử dụng biểu thức Lambda để tạo đối tượng giao diện Runnable
new Thread(() -> System.out.println("một luồng mới đã bắt đầu!")).start();
// Sử dụng lớp nội bộ ẩn danh để tạo đối tượng giao diện MyInterface
MyInterface myInterface1 = new MyInterface() {
@Override
public void print(String str) {
System.out.println(str);
}
};
myInterface1.print("gọi tới giao diện chức năng của tôi");
// Sử dụng biểu thức Lambda để tạo đối tượng giao diện MyInterface
MyInterface myInterface2 = System.out::println;
myInterface2.print("gọi tới giao diện chức năng của tôi");
}
}
Như vậy, chúng ta thấy rằng việc sử dụng biểu thức Lambda khiến mã nguồn trở nên ngắn gọn và rõ ràng hơn.