我有一个依赖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来检查Class的可用性。
解决方案的问题: 如果它不可用,API将每次抛出classdefnotfound,并且根据我的理解,class.forName会尝试加载类,因此会很慢。
注意: D类是可选的,如果它不可用,则应禁用与该类相关的功能
答案 0 :(得分:1)
您可以在任何类的类或类装入器对象上使用方法getResource()。如果它返回null然后 类不存在如下
URL url=SomeClass.class.getClassLoader().getResource("className.class");
if(url==null)//class not present
答案 1 :(得分:0)
您需要使用反射动态加载D类,然后调用其方法,就像对数据库驱动程序一样。您不能在代码中直接引用您的类,否则您的代码将无法编译并抱怨该类不可用。如果您的类可以在运行时加载,则打开所需的功能以便关闭它们。