classloader class.forName可以使用.*加载一个包中的所有类



感谢您帮助我完成

今天我有一个很简单的问题

问题:

在我的应用程序启动时,我使用将所有类加载到一个包中

Class.forName("org.codehaus.jackson.JsonGenerator$Feature");
............................
............................ and so on

像这样,我加载了所有的类,一切都很好,直到我升级了Jar,所以Jar包被更新为其他包名称,从org.codehaus.jacksoncom.fasterxml.jackson。所以我必须更改class.forName代码。

所需解决方案:以下代码是否可能

Class.forName("com.fasterxml.jackson.*");

或者有其他方法将所有类加载到一个包中?

请帮忙:(

Class.forName("com.fasterxml.jackson.*");是不可能的,
docs对此非常清楚,name参数应该是:

name-所需类的完全限定名称

此外,Class.forName还返回一个对象,表示给定名称后面的类。

你的问题是,如果你升级/更新jar文件,jackson的包可以是org.codehaus.jacksoncom.fasterxml.jackson中的一个。如果您想动态加载jackson类,但又不确定这些类的基本包是什么,这就很奇怪了。

但无论如何,如果给定的包名称包含所需的类(或者至少包含少数类,这样您就知道包是可见的(,一种解决方案是使用反射扫描,如下所示:
您能使用反射找到包中的所有类吗
然后用类循环遍历包,用Class.forName初始化它们。

最新更新