Giả sử một codebase java có một gói có tên là "com.example".Có cách nào để buộc một trình nạp lớp tải gói ngay cả khi không có lớp nào của nó được tải?
Khi chạy, chúng tôi có thể nhận được gói này bằng cách gọi
Package p = Package.getPackage("com.example"); //(returns null)
hoặc thậm chí có được một danh sách tất cả các gói bằng cách gọi
Packages[] ps = Package.getPackages();
Vấn đề là - nếu ClassLoader chưa nạp bất kỳ lớp học từ gói, nó sẽ không có sẵn cho các cuộc gọi chức năng này. Chúng ta có thể buộc nó để tải các gói bằng vũ lực có tốc độ tải một trong các lớp trong gói đầu tiên, như thế này:
this.getClass().getClassLoader().loadClass("com.example.SomeClass");
Package p = Package.getPackage("com.example"); //(returns non-null)
Tuy nhiên, đây là hacky và đòi hỏi phải biết trước thời hạn tên của một số lớp thuộc về gói.
Vì vậy, câu hỏi đặt ra là - có cách nào để có được một thể hiện của gói theo tên, bất kể có hay không ClassLoader đã làm bất cứ điều gì? Có phải các giả định của tôi về cách tải lớp/gói dường như hoạt động trong tình huống này chính xác không?
Cẩn thận với https://stackoverflow.com/questions/3455267/why-does-class-getpackage-return-the-same-package-for-classes-from-different-pac – Vadzim