java - NoClassDefFoundError 到底什么时候抛出?

标签 java dependencies runtime classpath

Java 中的运行时依赖关系是如何准确工作的。例如,如果运行时 Impl1Impl2 不在类路径中,这样的代码是否可能:

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/

相关文章:

dependencies - WSO2 DSS Cassandra 依赖

windows - 如何在exe中捆绑依赖项

c - 在 C 中查找所有头文件和源文件依赖项的工具

android - 设置运行参数?

java - Android Jsoup Html 解析?

java - 如何将循环递增 10 而不是 1?

c# - 在最终用户机器上运行支持 Kinect 的应用程序的先决条件

compiler-construction - 使用引用计数混合标记和扫描

java - 如何将 txt 文件从互联网加载到我的 jsf 应用程序中?

java - Web 服务传输异常 : Not Found [404]