假设一个 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)
但是,这很麻烦,需要提前知道属于包的某个类的名称。
所以问题是 - 有没有办法通过名称获取 Package 的实例,无论 ClassLoader 是否做了任何事情?我对类加载/包在这种情况下如何工作的假设是否准确?