有没有办法强制类装入器装入包,即使其类都未装入?
2022-09-03 06:02:40
假设一个java代码库有一个名为“com.example”的包。
在运行时,我们可以通过调用
Package p = Package.getPackage( "com.example" ); //(returns null)
甚至通过调用获取所有软件包的列表
Packages[] ps = Package.getPackages();
问题是 - 如果 ClassLoader 尚未从包中加载任何类,则这些函数调用将不可用。我们可以通过先强制加载包中的一个类来强制它加载包,如下所示:
this.getClass().getClassLoader().loadClass( "com.example.SomeClass" );
Package p = Package.getPackage( "com.example" ); //(returns non-null)
但是,这很黑客,需要提前知道属于该包的某些类的名称。
所以问题是 - 有没有办法按名称获取包的实例,无论ClassLoader是否做了任何事情?在这种情况下,我对类加载/包如何工作的假设是否准确?