我确定这是一个愚蠢的问题,但是..我们具有相同的Java源文件,并且我们要根据要为其构建应用程序的客户端使用不同版本的Java API(jar文件)。

较新版本的API具有我们在Java源代码中引用的setAAA()和setBBB()方法:

if (...) {
  api.setAAA(a);
  api.setBBB(b);
}

如果使用旧的API编译而旧的API没有这些 setter ,则此代码将失败。如果我们使用的是新API,是否有任何方法可以使此代码有条件地仅编译setter行?

谢谢。

最佳答案

Java确实不是要进行此条件编译的(不同于C++),老实说,这听起来像是结束于“类路径 hell ”的秘诀。

虽然您可以手动开始处理返回API版本的函数,但是您却拥有一个适合特定版本的类文件,但没有迹象表明它可能不兼容。

我之前曾遇到过这种情况(例如,使用不同版本的Eclipse),而且情况并不理想。我最终要做的是使用一个接口(interface),该接口(interface)具有两个不同的实现,每个API一个,将每个实现放在一个单独的项目中(在我的情况下是一个插件),然后尝试用工厂或注入(inject)方式加载它们。尽可能地隔离它们。

10-06 12:41
查看更多