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

java中的预编译器开关:如何更改导入类的路径,java,macros,import,precompiler,Java,Macros,Import,Precompiler,我需要在两个不同的平台SDK上使用相同的类 尽管类及其方法相同,但访问该类的路径不同。 在一台设备上,我需要使用: 导入a1.a2.classname 而对于第二台设备,我需要使用: 导入b1.b2.b3.classname 请不要问我为什么:我没有编写SDK,我无法更改它们 所以问题是:你会怎么做?有没有办法在不同的sdk版本上导入同一类的不同版本 在C++中,我会使用一个预编译开关,如: #ifdef SDK1 #include "path1/class.h" #else #include

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

尽管类及其方法相同,但访问该类的路径不同。 在一台设备上,我需要使用:

导入a1.a2.classname

而对于第二台设备,我需要使用:

导入b1.b2.b3.classname

请不要问我为什么:我没有编写SDK,我无法更改它们

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

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

#ifdef SDK1
#include "path1/class.h"
#else
#include "path2/class.h"
#endif
您将如何在java中实现这一点


请考虑我不能从类派生,因为我只能访问它的接口,而且方法的数量太大,无法考虑使用代理

。可以编写一个轻代理层,并检查哪些类可以使用“代码>类.FabNeMe())/代码>。如果你的两个班级将来在签名等方面会出现分歧,那么这就是解决办法


但是,如果您完全确定它们将始终保留相同的功能,则只需在构建工具中搜索并替换所有有问题的导入实例。在maven中,您可以使用资源筛选,例如。

这将编写多个构建。如果您使用
Class.forName()
,则可以为两者使用一个构建,并在运行时选择差异。(应用程序可以根据使用情况检测导入哪一个)问题是,在我使用该类的所有类中,我必须为不同的SDK添加不同的导入。这是真的,除非我将类包装在一个代理中,这是我想要避免的。我倾向于避免多次构建,因为一旦你开始走这条路,这可能会变成一场噩梦。对,但我试图避免编写代理,因为类有很多方法:它很无聊…@user38我意识到,因此第二段。那不是一个可接受的解决方案吗?最后我写了一些代理。我认为使用Maven也是合理的。为了不厌倦编写代理,我使用正则表达式将eclipse生成的存根自动转换为调用“real subject”实例的实现:-)