java中的预编译器开关:如何更改导入类的路径

时间:2011-11-18 13:27:07

标签: java macros import precompiler

我需要在两个不同的平台-SDK上使用相同的类。

虽然类和它的方法是相同的,但访问类的路径是不同的。 在我需要使用的一台设备上:

导入a1.a2.classname

而对于我需要使用的第二个设备:

导入b1.b2.b3.classname

请不要问我原因:我没有编写SDK而我无法更改它们。

所以问题是:你会怎么做?有没有办法在不同的sdk版本上导入同一个类的不同版本?

在C ++中,我会使用预编译器开关,如:

#ifdef SDK1
#include "path1/class.h"
#else
#include "path2/class.h"
#endif

你会如何在java中做到这一点?

请考虑我无法从课程派生,因为我只能访问其界面,并且方法的数量太大而无法考虑使用代理

1 个答案:

答案 0 :(得分:2)

您可以编写一个轻型代理层,并检查Class.forName()可用的类。如果您的两个班级将来会在签名等方面出现分歧,那么这就是您的选择。

但是,如果您完全确定它们将始终保留相同的功能,那么只需在构建工具中搜索并替换相关导入的所有实例。在maven中你可以使用资源过滤,this question有一个例子。