2017-10-03 15 views
7

gì là sự khác biệt giữa đòi hỏiđòi hỏi báo cáo mô-đun tĩnh trong khai module?sự khác biệt là gì giữa đòi hỏi và đòi hỏi tĩnh trong khai mô-đun

Ví dụ:

module bar { 
    requires java.compiler; 
    requires static java.base; 
} 
+3

Bản sao có thể có của [Hệ thống mô-đun Java 9 có hỗ trợ các phụ thuộc tùy chọn không?] (Https://stackoverflow.com/questions/39900460/does-the-java-9-module-system-support-optional-dependencies) – ZhekaKozlov

+1

@ZhekaKozlov Mặc dù tôi ủng hộ phiếu bầu trùng lặp. Nhưng không chắc lắm nếu bài đăng được liên kết nêu rõ * khác biệt * giữa hai. Dù sao, tôi cũng tin rằng động cơ chính đằng sau câu hỏi này có thể là để biết về sửa đổi 'tĩnh' trên chỉ thị' require'. – nullpointer

+1

Tôi không coi đây là một bản sao. Trong khi cả hai câu hỏi đối phó với cùng một chủ đề, họ có những góc độ rất khác nhau. Câu hỏi này ở đây sẽ được tìm thấy bởi những người tìm kiếm cú pháp, câu hỏi khác bởi những người có yêu cầu để làm cho một phụ thuộc tùy chọn. – Nicolai

Trả lời

7

Điều khoản requires thể hiện rằng cần có mô-đun cần thiết khi biên dịch và chạy. Do đó, khi hệ thống mô-đun gặp một mệnh đề như vậy trong module resolution (pha mà mô tả mô-đun được xử lý và phụ thuộc được giải quyết), nó tìm kiếm vũ trụ của các mô-đun quan sát được (các mô-đun trong JDK và trên đường dẫn mô-đun) và báo lỗi nếu nó không tìm thấy module.

Điều khoản requires static thể hiện a dependency that is optional at run time. Điều đó có nghĩa là tại thời gian biên dịch hệ thống mô-đun hoạt động chính xác như mô tả ở trên.

Tại thời điểm chạy, mặt khác, nó hầu như bỏ qua các mệnh đề requires static. Nếu nó gặp một, nó không giải quyết nó. Điều đó có nghĩa, nếu một mô-đun quan sát chỉ được tham chiếu với requires static, thì nó không được đưa vào biểu đồ mô-đun! Điều này có thể hơi ngạc nhiên lúc đầu. Mặt khác, nếu mô-đun biến nó thành đồ thị theo một cách khác (được yêu cầu bởi một số mô-đun khác, added manually with --add-modules, được vẽ bởi service binding), tất cả các mô-đun có phụ thuộc tùy chọn trên nó có thể read nó.

3

Sự khác biệt chính giữa hai là trong trường hợp của

requires static foo.module; 

Sự phụ thuộc là bắt buộc trong giai đoạn tĩnh, trong biên soạn, nhưng không bắt buộc trong giai đoạn động, trong khi thực hiện trong khi mặt khác

requires bar.module; 

Được thêm vào để tuyên bố rằng mô-đun phụ thuộc, theo tên, theo một số mô-đun khác, ở cả thời gian biên dịch và thời gian chạy.

Các vấn đề liên quan