Java 中的运行时依赖关系是如何准确工作的。例如,如果运行时 Impl1
或 Impl2
不在类路径中,这样的代码是否可能:
Thinger t;
if (classIsAvailable(Impl1.class)) t = new Impl1();
else t = new Impl2();
t.doThing();
或者如果没有通用接口(interface):
if (classIsAvailable(Impl1.class)) Impl1.doThingThisWay();
else Impl2.doThingTheOtherWay();
最佳答案
你不能完全像这样做,因为为了评估Impl1.class
,所述类必须可用(即已加载)。但是,您可以尝试按名称加载特定类
Class aClass = classLoader.forName("Impl1");
如果这没有失败(抛出异常),您可以使用 newInstance()
创建此类的实例。
当然,为了能够使用您的类,您必须确保它实现一个在编译时已知的接口(interface)。在这种情况下,您可以将创建的对象转换为该接口(interface)类型并继续使用它。
This article有一些示例代码。
关于java - NoClassDefFoundError 到底什么时候抛出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5895859/