Java 26 ra mắt 10 JEP: Pattern Matching chặt chẽ hơn, Cưỡng chế trường Final và Hằng số Lười
JDK 26 ra mắt vào ngày 17 tháng 3 năm 2026 với 10 JEP, bao gồm bản xem trước thứ tư của pattern matching nguyên thủy, cảnh báo cho việc thay đổi trường final qua reflection, và API Hằng số Lười được đổi tên.

Java 26 ra mắt vào ngày 17 tháng 3 năm 2026 — một bản phát hành không phải LTS với 10 JEP bao gồm cải tiến về ngữ nghĩa ngôn ngữ, tăng cường bảo mật và cải thiện runtime. Oracle sẽ hỗ trợ nó trong sáu tháng trước khi thúc đẩy mọi người lên Java 27. Đây là những điều quan trọng.
Kiểu Nguyên thủy trong Pattern: Bản xem trước thứ tư trở nên chặt chẽ hơn
JEP 530 tiếp tục nỗ lực lâu dài để cho phép pattern matching hoạt động trực tiếp với các kiểu nguyên thủy. Bản xem trước thứ tư này thắt chặt hai điều: tính chính xác vô điều kiện để chuyển đổi kiểu an toàn hơn, và kiểm tra sự thống trị trong switch giờ đây bắt các trường hợp không thể truy cập tại thời điểm biên dịch.
Lợi ích thực tế: bạn có thể viết switch trên một Object với các pattern nguyên thủy mà không cần boxing, và bảo vệ các phạm vi trực tiếp:
Object price = 250;
switch (price) {
case int p when p < 100 -> System.out.println("BUDGET: " + p);
case int p when p < 500 -> System.out.println("MID: " + p);
case int p -> System.out.println("PREMIUM: " + p);
case double d -> System.out.println("Double price: " + d);
default -> System.out.println("Unknown type");
}Trình biên dịch giờ đây từ chối mã như thế này, vốn đã biên dịch im lặng trong Java 25:
int i1 = 100;
switch (i1) {
case float f -> {} // LỖI: hằng số bên dưới bị thống trị
case 16_777_216 -> {} // không thể truy cập — float có thể biểu diễn chính xác giá trị này
default -> {}
}Nếu cơ sở mã của bạn sử dụng pattern matching nhiều, hãy mong đợi một vài lỗi biên dịch mới sau khi nâng cấp.
JEP 500: Làm cho Final thực sự Final
Deep reflection đã cho phép các thư viện vượt qua các trường final trong nhiều năm. Java 26 bắt đầu đóng lỗ hổng đó. Theo mặc định, việc thay đổi trường final qua reflection giờ đây in ra một cảnh báo:
CẢNH BÁO: Trường final value trong lớp Box đã bị thay đổi qua reflection
CẢNH BÁO: Sử dụng --enable-final-field-mutation=ALL-UNNAMED để tránh cảnh báo
CẢNH BÁO: Việc thay đổi các trường final sẽ bị chặn trong một bản phát hành tương laiBạn có thể kiểm soát hành vi với --illegal-final-field-mutation được đặt thành warn (mặc định), allow hoặc deny. Kế hoạch là làm cho deny trở thành mặc định trong một bản phát hành tương lai. Nếu bạn sử dụng các framework dựa vào việc thay đổi trường qua reflection (một số thư viện serialization, ORM hoặc injection), hãy kiểm tra ngay và sửa lỗi upstream hoặc tắt cảnh báo.
JEP 526: Hằng số Lười (Bản xem trước thứ hai)
Được đổi tên từ “Stable Values” (JEP 502 trong Java 25), Hằng số Lười cho phép bạn định nghĩa các đối tượng có giá trị được tính toán một cách lười biếng nhưng sau đó được JVM coi như một hằng số thực sự — cho phép các tối ưu hóa như constant folding. API đã được đơn giản hóa; mong đợi một factory LazyConstant trả về một holder bất biến. Đây vẫn là bản xem trước, vì vậy bạn cần --enable-preview để sử dụng nó.
Các JEP khác đáng đề cập
Các JEP còn lại bao gồm cải tiến thư viện và bảo mật: cập nhật API KeyStore, một module incubator Vector mới, và dọn dẹp mã SecurityManager không còn được dùng. Không có JEP nào gây chú ý, nhưng chúng giảm ma sát cho các nhóm duy trì stack Java hiện đại.
Kết luận
Java 26 là một bản phát hành ngắn hạn vững chắc. Việc thắt chặt pattern matching và cưỡng chế trường final là hai thay đổi có khả năng phá vỡ mã hiện có nhất — theo một cách tốt. Nâng cấp pipeline CI của bạn, quét các cảnh báo và lên kế hoạch cho bước nhảy LTS lên Java 27 vào cuối năm nay.
Thảo luận
0 bình luận
Hãy là người đầu tiên thảo luận.