Bạn có thể kiểm tra xem một jar được niêm phong bằng cách xác định một lớp tồn tại trong một gói được sử dụng trong tệp jar. Nếu bình được niêm phong, tất cả các gói thường được niêm phong, nếu không bạn có thể niêm phong chúng trên cơ sở mỗi gói. Sau đó, lớp bạn tạo nên cố gắng truy cập các thành viên được bảo vệ hoặc mặc định của một lớp trong gói đó.
Ví dụ: nếu jar có một lớp com.example.Widget
trong đó gói com.example
được niêm phong và Widget
có các thành viên được bảo vệ / mặc định, hãy tạo một lớp com.example.Test
cố gắng truy cập các thành viên đó. Điều này sẽ thất bại.
Lý do niêm phong xuất phát từ một mô tả về cách kiểm tra nó: bạn muốn mã của mình được khép kín và người dùng của jar chỉ nên sử dụng các thành viên công cộng. Các gói không bắt buộc phải là duy nhất trên các lọ (và các thư mục bin trong IDE của bạn) được sử dụng bởi một chương trình. Bạn có thể định nghĩa một lớp trong cùng một gói như trong một jar và truy cập các thành viên được bảo vệ / mặc định có thể gây ra vấn đề. Thông thường, khả năng hiển thị mặc định được sử dụng như một friend
từ khóa tương tự với từ khóa của C ++ bằng cách cho phép các lớp khác trong cùng một gói khả năng thực hiện các hành động chỉ an toàn vì cùng một lập trình viên làm việc trên cả hai lớp và hiểu nội bộ của chúng. Có lẽ một phương thức hiển thị mặc định sẽ bỏ qua một số giới hạn kiểm tra tên hiệu năng, với sự hiểu rằng mã máy khách sẽ không bao giờ truy cập được. Ví dụ:String
lớp trong Java có một vài trong số các loại phương thức này vì việc xử lý Chuỗi phải nhanh như chớp vì một lượng lớn mã phụ thuộc vào nó. BigDecimal
được xây dựng trên đầu trang BigInteger
và sử dụng quyền truy cập mặc định để tối ưu hóa một vài thao tác mà những người dùng khác của lớp không nên sử dụng.
TL; DR : Các lớp trong cùng một gói có thể truy cập các thành viên không công khai của nhau để thực hiện hoặc đơn giản. Truy cập này có thể không kiểm tra bất biến và điều kiện tiên quyết. Người ta có thể đặt các lớp trong cùng một gói ở nhiều vị trí trong đường dẫn lớp. Niêm phong một gói hoặc jar hạn chế mã máy khách truy cập các phương thức này, bởi vì nó có thể phá vỡ các công cụ khác.
Điều này sẽ không gây ra bất kỳ vấn đề cho người dùng jar. Cơ chế nạp lớp truy cập các tài nguyên (ví dụ: tệp lớp) trong các lọ hỗ trợ đầy đủ các lọ và gói kín.
Đọc liên quan: Gói niêm phong trong một tệp JAR