Giới Thiệu
Hôm này mình xin giới thiệu các tính năng mới nổi bật từ bản java 13 trở đi, giúp bạn tự tin hơn để nâng cấp lên java 17 nhé.
Text Blocks (Java 15)
Text Blocks là tính năng được phát triển từ java 13, tuy nhiên phải tới java 15 nó mới được chính thức đưa vào sử dụng. Text Blocks giúp viện sử dụng chuỗi trong java dễ dành hơn
Java old version
String demo = "Hoàng Phúc International" + "\n" + "kafka\n" + "kafka\n";
Java new version
String demo = """ Hoàng Phúc International kafka kafka """;
Để sử dụng các giá trị biến trong Text Blocks bạn có thể dùng hàm String.format, ví dụ:
String demo = """ Some parameter: %s """.formatted("HPI");
Records
record là một kiểu mới trong java 15, giúp bạn khởi tạo nhanh object.
Mình cùng làm 1 ví dụ để thấy sự tiện lợi so với sử dụng Class nhé
Sử dụng Class, khởi tạo tương đối dài và cồng kềnh =))
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; }
}
Sử dụng Records, cú pháp rất tính gọn và không cần tới thư viện thứ 3 như lombok, biến name và age sẽ được record lưu trữ lại.
public record Person(String name, int age) {
} Person p = new Person("hpi",32);
p.name();
Sealed Classes
các Class khi được khai báo trong java sẽ không kiểm soát đường quyền thừa kế, bất cứ Class nào cũng có thể kế thừa được Class của bạn, để khắc phúc vấn đề này Sealed Classes được cho ra mắt trong java 15.
Sealed Classes kiểm soát việc kế thừa, các lớp chỉ được kế thừa lớp Sealed Classes khi Sealed Classes cấp quyền kế thừa
public abstract sealed class Person permits ClassA, ClassB { }
Khi sử dụng permits ClassA, ClassB
bạn đang cấp quyền cho ClassA, ClassB được phép kế thừa từ classs Person
bất kỳ class khác khi kế thừa sẽ nhận được thông báo lỗi.
Pattern Matching Type Checks
từ phiên bản java 14 trở lên, việc kiểm tra Type sẽ trở nên đơn giản hơn về mặt cú pháp, thay đổi này thường không tạo ra sự khác biệt về hiệu năng tuy nhiên giúp code bạn minh bạc hơn khá nhiều
/// OLD
if (person instanceof Employee) { Employee employee = (Employee) person;
} /// NEW
if (person instanceof Employee employee) { Date hireDate = employee.getHireDate();
}
Vector API
API Vector được phát triển lần đầu ở java 16. Ý tưởng của API này là cung cấp một phương tiện tính toán vector cuối cùng sẽ có thể hoạt động tối ưu hơn so với phương pháp tính toán vô hướng truyền thống.
int[] a = {1, 2, 3, 4};
int[] b = {5, 6, 7, 8}; var c = new int[a.length]; for (int i = 0; i < a.length; i++) { c[i] = a[i] * b[i];
}
Ví dụ về tính toán này, đối với một mảng có độ dài 4, sẽ thực thi trong 4 chu kỳ. Bây giờ, chúng ta hãy xem xét phép tính dựa trên Vector:
int[] a = {1, 2, 3, 4};
int[] b = {5, 6, 7, 8}; var vectorA = IntVector.fromArray(IntVector.SPECIES_128, a, 0);
var vectorB = IntVector.fromArray(IntVector.SPECIES_128, b, 0);
var vectorC = vectorA.mul(vectorB);
vectorC.intoArray(c, 0);
Vector giúp bạn tối ưu hơn khi bạn làm việc với mảng.