12/08/2018, 16:14

What''s new in Java 9

What's new in Java 9 Một hệ thống modul cung cấp các chức năng tương tự với OSGi framework’s system. Modular có các khái niệm tương tự như dependence, chúng ta có thể public module. Một trong những động lực chính ở đây là cung cấp module cho JVM, có thể chạy trên các thiết bị có bộ nhớ ...

What's new in Java 9

Một hệ thống modul cung cấp các chức năng tương tự với OSGi framework’s system. Modular có các khái niệm tương tự như dependence, chúng ta có thể public module.

Một trong những động lực chính ở đây là cung cấp module cho JVM, có thể chạy trên các thiết bị có bộ nhớ ít hơn rất nhiều. JVM có thể chạy với chỉ những module và API được yêu cầu bởi ứng dụng.

Khi bạn có các module với dependence, và một JDK được module, các khả năng mới xuất hiện. Các mô đun ứng dụng của bạn bây giờ thể hiện sự phụ thuộc của họ vào các mô đun ứng dụng khác và trên các module mà nó sử dụng từ JDK. Tại sao không sử dụng thông tin đó để tạo ra một môi trường chạy ít nhất, chỉ chứa những module cần thiết để chạy ứng dụng của bạn? Điều này có thể thực hiện được bằng công cụ jlink mới trong Java 9. Thay vì gửi ứng dụng của bạn với cài đặt JDK đã được tải đầy đủ, bạn có thể tạo một hình ảnh tối thiểu được tối ưu hóa cho ứng dụng của bạn.

Giống như nhiều ngôn ngữ khác, Java 9 cho phép chúng ta có thể code ngay trên terminal, đây là công cụ tương tác để đánh giá các khai báo, phát biểu và biểu thức của Java, cùng với một API. Nó rất tiện lợi cho việc kiểm tra đoạn mã nhỏ, mà nếu không yêu cầu tạo 1 class với main method.

Đôi khi đó là những điều nhỏ bé có thể tạo ra sự khác biệt lớn. Bạn đã từng sử dụng Google để tìm đúng trang Javadoc, giống như tôi? Điều đó không còn cần thiết. Javadoc bây giờ bao gồm tìm kiếm ngay trong bản thân tài liệu API. Là một tiền thưởng thêm, đầu ra Javadoc bây giờ là tuân thủ HTML5. Ngoài ra, bạn sẽ nhận thấy rằng mọi trang Javadoc đều bao gồm thông tin về mô-đun JDK của lớp hoặc giao diện.

Thông thường bạn muốn tạo một collection, trong mã của bạn và trực tiếp nạp nó vào một số phần tử. Điều đó dẫn đến mã lặp đi lặp lại nơi bạn khởi tạo bộ sưu tập, tiếp theo là một số cuộc gọi add. Với Java 9, một số phương thức được gọi là phương pháp thu mua nhà máy đã được thêm vào:

Streams API được cho là một trong những cải tiến tốt nhất đối với thư viện chuẩn Java trong thời gian dài. Nó cho phép bạn tạo các đường dẫn khai báo của các biến đổi trên các bộ sưu tập. Với Java 9, điều này sẽ trở nên tốt hơn. Có bốn phương pháp mới được thêm vào giao diện Stream: dropWhile, takeWhile, ofNullable. Phương thức iterate được overloadi, cho phép bạn cung cấp một Predicate về thời điểm dừng iterator. IntStream.iterate(1, i -> i < 100, i -> i + 1).forEach(System.out::println);

Java 8 cho phép chúng ta định nghĩa method có thân hàm với static và default. Một giao diện bây giờ cũng có thể chứa hành vi thay vì chỉ chữ ký phương pháp. Nhưng những gì sẽ xảy ra nếu bạn có một số phương pháp mặc định trên một giao diện với mã mà gần như cùng một điều? Thông thường, bạn cần cấu trúc lại các phương thức đó để gọi một phương thức riêng có chứa chức năng được chia sẻ. Nhưng các method mặc định không thể là private. Tạo một default method khác với code được chia sẻ không phải là một giải pháp, bởi vì phương pháp trợ giúp này trở thành một phần của API công khai. Với Java 9, bạn có thể thêm các private method vào các interface để giải quyết vấn đề này.

Một cách mới để thực hiện các cuộc gọi HTTP đến với Java 9. Thay thế quá hạn cho API HttpURLConnection cũ cũng hỗ trợ WebSockets và HTTP / 2 ra khỏi hộp. Một lưu ý: HttpClient API mới được phân phối như là một cái gọi là module _incubator trong Java 9. Điều này có nghĩa là API không được đảm bảo là 100% cuối cùng. Tuy nhiên, với sự xuất hiện của Java 9 bạn đã có thể bắt đầu sử dụng API này

HttpClient client = HttpClient.newHttpClient();

HttpRequest req =
   HttpRequest.newBuilder(URI.create("http://www.google.com"))
              .header("User-Agent","Java")
              .GET()
              .build();

HttpResponse<String> resp = client.send(req, HttpResponse.BodyHandler.asString());
0