2

我有一个依赖 jar,对于构建 A,dependency.jar 将包含 A、B、C、D 类。对于构建 B,dependency.jar 将仅包含类 A、B、C

问题:

资料来源:我的代码正在使用所有 A、B、C、D 类。

目标:我编写的代码对于构建 A 和 B 应该保持不变。

问题:但显然 D 类在 Build B 中不可用。所以我的代码应该处理 D 类的可用性。同时,我要添加的额外代码来处理 D 类的可用性,不应该放慢速度我的代码。

请提出可能的解决方案。

一种解决方案:我们将使用 Class.forName() API 来检查类的可用性。

解决方案的问题:如果 classdefnotfound 不可用,API 每次都会抛出它,并且根据我的理解 class.forName 将尝试加载该类,所以会很慢。

注意:D 类是可选的,如果不可用,则应禁用与该类相关的功能

4

2 回答 2

1

您可以在任何类的类或类加载器对象上使用方法 getResource()。如果它返回 null 则该类不存在,如下所示

URL url=SomeClass.class.getClassLoader().getResource("className.class");
 if(url==null)//class not present
于 2013-08-16T09:44:15.583 回答
0

您需要使用反射动态加载 D 类,然后调用它的方法,就像对数据库驱动程序执行此操作一样。您不能在代码中直接引用您的类,否则您的代码将无法编译并抱怨该类不可用。如果您的类可以在运行时加载,则打开所需的功能,然后将其关闭。

于 2013-08-16T09:55:15.460 回答