我有一个我想要创建的java项目,它将构建在某些供应商API之上。这些API连接到运行该供应商软件的服务器并执行各种操作。是否可以在运行时使用Java切换Class版本?
我有2个不同版本的服务器支持2个不同的API版本。对API的任何更改仅在内部实现。 I.E.旧版本中可用的类,接口,方法等存在于较新版本中。因此,我编写的代码应该编译并使用任一API版本运行。使用API进行连接时,向服务器提供的API中存在一个版本号,可防止您在该特定服务器上使用不同的版本API。
有没有办法在运行时切换JAR文件? (类似于c/C++ DLL ??)
如果在运行时切换API版本是不可能的,那么处理该问题的最优雅方式是什么?构建代码2x(每个api版本一个)?
我希望我失去了一些东西,但方法2似乎并不理想。下面是一个更具体的例子:
package org.myhypotheticalwrapper.analyzer;
import org.myhypothetical.worker;
import org.myhypothetical.comparator;
public class Analyzer {
Worker w1 = new Worker();
Worker w2 = new Worker();
Comparator c = new Comparator(w1.connectAndDoStuff(),w2.connectAndDoStuff());
c.generateReport();
}
这是我的两难处境。我希望w1能够使用旧的API构建,并且使用新的API构建w2,以便它们可以连接到适当的服务器。除了API以外,它们都是相同的(相同的代码)。为了适应不同的API版本,我是否必须为W1和W2创建两个唯一命名的类类型,即使它们的代码是相同的?看起来,如果我有很多我想与之交互的API版本,它可能会很快变得笨拙。
任何意见和建议非常感谢。
只有当您有两个jar文件由同一个类加载器引用时,才会出现这种情况。如果您使用相同的类加载器,那么将使用一组类,而另一组不会使用。 但是,可能会在相同的JVM中加载具有相同包和相同名称的两个类。他们只需要加载不同的类加载器。 – 2009-07-22 19:10:58