gpt4 book ai didi

java - 有没有办法强制类加载器加载一个包,即使它的类都没有被加载?

转载 作者:太空狗 更新时间:2023-10-29 22:54:10 24 4
gpt4 key购买 nike

假设一个 java 代码库有一个名为“com.example”的包。

在运行时,我们可以通过调用来获取这个Package

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)

但是,这是 hacky,需要提前知道属于包的某个类的名称。

所以问题是 - 是否有任何方法可以通过名称获取 Package 的实例,而不管 ClassLoader 是否已执行任何操作?我关于类加载/包在这种情况下如何工作的假设是否准确?

最佳答案

或者,您可以使用类根目录作为起点,遍历所有 *.class 文件和子目录。这只有在您事先知道所有 .class 文件所在的位置时才有效。

这一切的原因是 Java 具有动态类加载,因此可以在运行时从编译时甚至启动时不知道的位置加载类。因此,包的概念只是加载类的命名空间,而不是您可以用来查找它们的目录。

关于java - 有没有办法强制类加载器加载一个包,即使它的类都没有被加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1816730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com