我会尽力说出这句话。我有一个类似API的程序 - 它使用反射来动态调用类中的方法。在这种情况下:
Server.java
public static void main(String[] args) {
Class<?> clazz = Class.forName("DiHandler");
StHandler out = (StHandler) clazz.newInstance();
out.read();
}
DiHandler.java
// implements StHandler
import edu.ds.*;
public void read() {
Ds aType = new Ds();
aType = "134";
}
所以DiHandler有一个方法read()可以包含任何东西,在编译时它与Server.java无关。
我的问题是:DiHandler.java使用JAR文件中的类Ds。当我在Eclipse中处理DiHandler.java时(在与项目Server.java相关的单独项目中),我可以毫无问题地添加这个JAR。但是当我将DiHandler.class移动到编译后,由Server.class使用时,它怎么还能使用JAR文件呢?
我希望这是有道理的,我想用另一种方式来表达它是如何允许DiHandler在不编辑类路径的情况下从JAR调用类?
非常感谢,并且对于任何混乱或措辞不当感到抱歉,我只能提供感谢以及提供一品脱的任何帮助。
中号
答案 0 :(得分:2)
无论如何,您需要让加载DiHandler
的ClassLoader知道如何加载Ds
类。最简单的方法是通过类路径。
另一种方法是提供您自己的ClassLoader,用于加载DiHandler
,该ClassLoader知道如何加载Ds
。这可以是URLClassLoader
的子类,允许您即时向JAR文件添加URL。在实践中它会是什么样子我不能说因为我不知道你的背景细节。
答案 1 :(得分:0)
如果JVM可以访问它,则只能使用类。这意味着该类必须位于JVM的类路径中。
有很多方法可以将jar放在程序的类路径中。也许,如果你描述你工作的环境和面临的限制,有人将能够帮助你找到将依赖jar放在类路径上的正确机制。